如何保护我做的网站模板全网搜索
使用语言: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+"";//将字符串转化为字符数组,toCharArraychar[] 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}
}