【蓝桥杯2019Java】求和、矩阵切割、质数

求和

在这里插入图片描述

public class Main{
	static int sum=0;
	public static void main(String[] args) {
		for(int i=1;i<=2019;i++) {
			String str=i+"";
			if(str.contains("2")||str.contains("0")||str.contains("1")||str.contains("9"))
				sum+=i;
		}
		System.out.println(sum);
	}
}

答案1905111


矩阵切割

小明有一些矩形的材料,他要从这些矩形材料中切割出一些正方形。当他面对一块矩形材料时,他总是从中间切割一刀,切出一块最大的正方形,剩下一块矩形,然后再切割剩下的矩形材料,直到全部切为正方形为止。例如,对于一块两边分别为5 和3 的材料(记为5 X 3),小明会依次切出3 X 3、2X 2、1 X 1、1 X 1 共4 个正方形。现在小明有一块矩形的材料,两边长分别是2019 和324。请问小明最终会切出多少个正方形?

思想就是辗转相除法。一个axb 的矩形不断的切除掉 min{a,b}*min{a,b}个矩形。切到 长或宽中有一个小于min{a,b},在此之后,就不能继续切边长为min{a,b}的矩形了。 剩下的情况可能是a,a%b,或b,b%a的情况,这主要取决于谁小。这样子切割下去,直到切割到1或 一条边是另外一条边的倍数的情况,如果成倍数,就直接a/b 便是能切出来的个数。不成倍数,则切的是最小边。

public class Main {
	static int count=0;
	public static void main(String[] args) {
		int n =2019;int m =324;
		gcd(n,m);
		System.out.println(count);
	}
	public static int gcd(int n ,int m) {
		if(m!=0)count+=n/m;
		return m==0? n:gcd(m,n%m);
	}
}

另一种版本

public class 矩形切割 {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        int max = sc.nextInt();
        int min=sc.nextInt();
        int count=0,num,temp;
        while (true){
            if ( min==0){//当没有得时候就可以退出了
                break;
            }
             num =  max/min;//看看当前长宽不变得时候有几个正方形
             count+=num;    //把这些都加进来
             //替换一下,剪完正方形,之后,原来得长就变成了宽,原来的宽就成了长
            temp=max-min*num;//原来得长减去剪掉得几个宽,就是现在得宽
            max=min;
            min=temp;

        }
        System.out.println(count);
    }
}

或者直接手算,反正数据不太大

答案21

本题参考1
本题参考2


质数

【问题描述】
我们知道第一个质数是 2、第二个质数是 3、第三个质数是 5……请你计算 第 2019 个质数是多少?
【答案提交】
这是一道结果填空的题,你只需要算出结果后提交即可。本题的结果为一 个整数,在提交答案时只填写这个整数,填写多余的内容将无法得分。

唯一的注意点就是第2019位,必须准确,可以拿数字验证。

public class Main{
	static int counts=0;
	public static void main(String[] args) {
		for(int i=2;;i++) {
			if(check(i))counts++;
			if(counts==2019) {
				System.out.println(i);
				break;
			}
		}
	}
	static boolean check(int n) {
		for (int i = 2; i <= (int) Math.sqrt(n); i ++)
			if(n % i == 0) return false;
		return true;
	}
}

答案17569

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值