0
点赞
收藏
分享

微信扫一扫

蓝桥杯省赛JavaB组真题

登高且赋 2022-03-14 阅读 62

请添加图片描述
思路: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);
	}
}
举报

相关推荐

0 条评论