蓝桥杯-算法基础-For循环

发布于:2025-04-03 ⋅ 阅读:(55) ⋅ 点赞:(0)

使用语言:Java

for循环与字符串

2019.Java C组第一题

小明对数位中含有2,0,1,9的数字很感兴趣,在1到40中这样的数有28个,他们的和为574,从1到2019,所有这样的数的和是多少?

思路分析1:获取1-2019每个数字的千位(不为0)百位,十位,个位,将每一个数字和2,0,1,9这四个数字进行比较,若存在,累加到变量中

思路分析2:将数字转化为字符串,获取每一位数字

public class demo1{
    public static void main(String[] args){
        //定义变量用于统计结果
        int count=0;
        //在范围内进行循环
        for(int i=1;i<=2019;i++){
            //将数字转化为字符串
            String j=i+"";
            //将字符串转化为字符数组,toCharArray
            char[] cs=j.toCharArray();
            //遍历数组与数字进行对比
            for(int k=0;k<cs.length;k++){
                if(cs[k]=='2'||cs[k]=='0'||cs[k]=='1'||cs[k]=='9'){
                    count+=i;
                    break;
                }
            }
        }
        System.out.println(count);
    }
}

注意事项:1.count结果的打印要在循环外层,即代码运行完成的地方

2.进行count累加后记得加上break-->否则一个数字可能会累加多次,如2019,四个数字都会符合, 如果不加break,则会累加4次,导致运行结果错误

3.字符和字符串计算长度的比较:char->length && String->length()

2015.Java C组第二题

一些数字的立方的末尾正好是该数字本身,比如:1,4,5,6,9,24,25...请你计算一下,在10^4以内的数字中(指该数字,并非它立方后的数值),符合这个特征的正整数一共有多少个

思路分析:已知循环次数,用for循环。可以将数字和数字的立方转成字符串--->str.endWith(str2):判断字符串str是否以字符串str2结尾

public class demo2{
    public static void main(String[] args){
        int count=0;
        for(int i=1;i<=10000;i++){
            //计算该数字的立方值
            //使用long类型而不是int类型
            //int类型的最大值为2^31-1,使用long类型可避免整数溢出
            long cube=(long)i*i*i;
            //将数字和数字的立方都转变为字符串
            String numStr=Integer.toString(i);
            String cubeStr=Long.toString(cube);
            if(cubeStr.endsWith(numStr)){
               count++; 
            }
        }
        System.out.println(count);//36
    }
}

2019.JavaC组第二题

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

思路分析:每次切割最大的正方形后,剩余部分仍为矩形,重复此过程直到全部变为正方形,切割次数=每次切割的正方形数量的总和--->使用辗转相除法

public class demo3{
     public static int countSquares(int a, int b) {
         //统计结果
         int count=0;
         //当较小边不为零时继续切割
         while(b!=0){
             //确保a是最大边
             if(a<b){
                 int temp=a;
                 a=b;
                 b=temp;
             }
             //当前切割的正方形数量
             int squares=a/b;
             //累加到总数
             count+=squares;
             //剩余边长
             int reminder=a%b;
             //更新边长,继续处理剩余部分
             a=b;
             b=reminder;
         }
         return count;
     }


    
    public static void main(String[] args){
       //函数调用
        System.out.println(countSquares(2019,324));//21
    }
}


网站公告

今日签到

点亮在社区的每一天
去签到