思路:K相同,B相同就是同一条直线,直接暴力所有的(x,y)组合,然后计算一下就行
public class zhixian {
public static void main(String[] args) {
List<Integer> points=new ArrayList<>();
Set<String> ans =new HashSet<>();
for(int i=0;i<20;i++) {
for(int j=0;j<21;j++) {
points.add(i*100+j);//i代表x,j代表y,统计出一共有多少个点
}
}
int size =points.size();
for(int i=0;i<size;i++) {
int node1=points.get(i);
int x1=node1/100,y1=node1%100;
for(int j=i+1;j<size;j++) {
int node2=points.get(j);
int x2=node2/100,y2=node2%100;
int up=y2-y1,down=x1-x2;
if(down==0) {
ans.add("x="+x1);
continue;
}
int c1=gcd(up,down);
String K=up/c1+" "+down/c1;
int Up=y1*down-x1*up;//y=kx+b b=y-kx
int c2=gcd(Up,down);
String B=Up/c2+" "+down/c2;
ans.add(K+" "+B);
}
}
System.out.println(ans.size());
}
static int gcd(int a,int b) {
return b==0?a:gcd(b,a%b);
}
}
思路:看题可知L、W、H都是n的约数,那就先求出来所与n的约数,然后三重循环暴力只要相乘等于n就是一种方案即可
public class D {
public static void main(String[] args) {
ArrayList<Long> arrayList=new ArrayList<>();
long n=2021041820210418L;
for(long i=1;i<=Math.sqrt(n);i++) {
if(n%i==0) {
arrayList.add(i);
if(n/i!=i) {
arrayList.add(n/i);
}
}
}
int res=0;
for(long a:arrayList) {
for(long b:arrayList) {
for(long c:arrayList) {
if(a*b*c==n) {
res++;
}
}
}
}
System.out.println(res);
}
}