2022年0701-Com.Java.Basis第五课《针对流程控制的语句练习题》、
问题一:隔行变色
Excel表的格子很多,为了避免把某行的数据和相邻行混淆,可以采用隔行变色的样式。
小明设计的样式为:第1行蓝色,第2行白色,第3行蓝色,第4行白色,....
现在小明想知道,从第21行到第50行一共包含了多少个蓝色的行。
请你直接提交这个整数,千万不要填写任何多余的内容。
package 第四次蓝桥杯测试; /** * * @author MZFAITHDREAM *1.隔行变色 Excel表的格子很多,为了避免把某行的数据和相邻行混淆,可以采用隔行变色的样式。 小明设计的样式为:第1行蓝色,第2行白色,第3行蓝色,第4行白色,.... 现在小明想知道,从第21行到第50行一共包含了多少个蓝色的行。 请你直接提交这个整数,千万不要填写任何多余的内容。15 */ public class DemoTest1 { public static void main(String[] args) { for (int i = 21; i <= 50; i=i+2) { System.out.println(i); } } }
问题二:煤球数目
有一堆煤球,堆成三角棱锥形。具体:
第一层放1个,
第二层3个(排列成三角形),
第三层6个(排列成三角形),
第四层10个(排列成三角形),
…
如果一共有200层,共有多少个煤球?
请填表示煤球总数目的数字。
注意:你提交的应该是一个整数,不要填写任何多余的内容或说明性文字。
package 第四次蓝桥杯测试; /** * 煤球数目 * @author MZFAITHDREAM *有一堆煤球,堆成三角棱锥形。具体: 第一层放1个, 第二层3个(排列成三角形), 第三层6个(排列成三角形), 第四层10个(排列成三角形), … 如果一共有200层,共有多少个煤球? 请填表示煤球总数目的数字。 注意:你提交的应该是一个整数,不要填写任何多余的内容或说明性文字。 递归 */ public class DemoTest2 { public static void main(String[] args) { int sum = 0; //求和 每层煤球的数目相加 for (int i = 1; i <= 100 ; i++) { sum += briquetteNum(i); } System.out.println(sum); } //求每层有多少个煤球 public static int briquetteNum(int num) { if (num == 1) { return 1; }else { // return briquetteNum(num - 1) + num; } } }
问题三:无穷分数
无穷的分数,有时会趋向于固定的数字。
请计算【图1.jpg】所示的无穷分数,要求四舍五入,精确到小数点后5位,小数位不足的补0。
请填写该浮点数,不能填写任何多余的内容。
package 第四次蓝桥杯测试; import java.text.DecimalFormat; /** * 无穷分数 * 3. 无穷分数 无穷的分数,有时会趋向于固定的数字。 请计算【图1.jpg】所示的无穷分数,要求四舍五入,精确到小数点后5位,小数位不足的补0。 请填写该浮点数,不能填写任何多余的内容。 * @author MZFAITHDREAM *DecimalFormat是格式为十进制数的NumberFormat的具体子类。 * 它具有各种功能,旨在使任何地区的数字解析和格式化,包括支持西方,阿拉伯语和印度数字 它还支持不同类型的数字,包括整数(123),定点数(123.4),科学记数法(1.23E4),百分比(12%)和货币金额(123美元)。 所有这些都可以进行本地化。 */ public class DemoTest3 { public static void main(String[] args) { float a=100000; DecimalFormat df = new DecimalFormat("0.00000");//保留五位小数 for (float i = 1000000; i >= 0; i=i-1) { a = i + (i + 1) / a; } System.out.println("保留的五位数"+df.format(a)); } }
问题四:海盗比酒量
有一群海盗(不多于20人),在船上比拼酒量。过程如下:打开一瓶酒,所有在场的人平分喝下,
有几个人倒下了。再打开一瓶酒平分,又有倒下的,再次重复...... 直到开了第4瓶酒,坐着的已经所剩无几,
海盗船长也在其中。当第4瓶酒平分喝下后,大家都倒下了。
等船长醒来,发现海盗船搁浅了。他在航海日志中写到:“......昨天,我正好喝了一瓶.......奉劝大家,开船不喝酒,喝酒别开船......”
请你根据这些信息,推断开始有多少人,每一轮喝下来还剩多少人。
如果有多个可能的答案,请列出所有答案,每个答案占一行。
格式是:人数,人数,...
例如,有一种可能是:20,5,4,2,0
package 第四次蓝桥杯测试; /** * * @author MZFAITHDREAM *4. 海盗比酒量 有一群海盗(不多于20人),在船上比拼酒量。过程如下:打开一瓶酒,所有在场的人平分喝下, 有几个人倒下了。再打开一瓶酒平分,又有倒下的,再次重复...... 直到开了第4瓶酒,坐着的已经所剩无几, 海盗船长也在其中。当第4瓶酒平分喝下后,大家都倒下了。 等船长醒来,发现海盗船搁浅了。他在航海日志中写到:“......昨天,我正好喝了一瓶.......奉劝大家,开船不喝酒,喝酒别开船......” 请你根据这些信息,推断开始有多少人,每一轮喝下来还剩多少人。 如果有多个可能的答案,请列出所有答案,每个答案占一行。 格式是:人数,人数,... 例如,有一种可能是:20,5,4,2,0 */ public class DemoTest4 { public static void main(String[] args) { new a().f(); } } class a{ public void f() { float i,j,q,people; //people是海盗总人数 //i是第一轮剩余人数 //j是第二轮剩余人数 //p是第三轮剩余人数 //第四轮就全都倒下了,不用设置变量 //因为每一轮都有倒下的(我认为),所以每一轮的最大值都是上一轮-1(上一轮至少倒下一个的情况) //people>=5是我认为最少得有五个海盗 for( people=20;people>=5;people--){ for(i=people-1;i>=4;i--){ for(j=i-1;j>=3;j--){ for(q=j-1;q>=2;q--){ if(1/people+1/i+1/j+1/q==1) System.out.println((int)people+" "+(int)i+" "+(int)j+" "+(int)q+" "+"0"); } } } } } }
问题五:生日蜡烛
某君从某年开始每年都举办一次生日party,并且每次都要吹熄与年龄相同根数的蜡烛。
现在算起来,他一共吹熄了236根蜡烛。
请问,他从多少岁开始过生日party的?
请填写他开始过生日party的年龄数。
注意:你提交的应该是一个整数,不要填写任何多余的内容或说明性文字。
package WEB45; /** * * @author MZFAITHDREAM *生日蜡烛 某君从某年开始每年都举办一次生日party,并且每次都要吹熄与年龄相同根数的蜡烛。 现在算起来,他一共吹熄了236根蜡烛。 请问,他从多少岁开始过生日party的? 请填写他开始过生日party的年龄数。 注意:你提交的应该是一个整数,不要填写任何多余的内容或说明性文字。 */ public class 生日蜡烛 { public static void main(String[] args) { for (int i = 1; i < 100; i++) { int num=i; int sum=i; while(true) { num++; sum=sum+num; if(sum==236) { System.out.print("从第"+i+"开始吹蜡烛,今年吹了"+num+"根蜡烛"); } if(sum>236) { break; } } } } }
问题六:世纪末的星期
package WEB45; import java.util.Calendar; /** * * @author MZFAITHDREAM *世纪末的星期 曾有邪教称1999年12月31日是世界末日。当然该谣言已经不攻自破。 还有人称今后的某个世纪末的12月31日,如果是星期一则会.... 有趣的是,任何一个世纪末的年份的12月31日都不可能是星期一!! 1999年的12月31日是星期五, 请问:未来哪一个离我们最近的一个世纪末年(即xx99年)的12月31日正好是星期天(即星期日)? 请回答该年份(只写这个4位整数,不要写12月31等多余信息) */ public class 世纪末的星期 { public static void main(String[] args) { // 时间的的类 Calendar c=Calendar.getInstance(); for (int year = 1999; year < 10000; year+=100) { c.set(Calendar.YEAR, year); c.set(Calendar.MARCH, 11); c.set(Calendar.DAY_OF_MONTH, 31); if(c.get(Calendar.DAY_OF_WEEK)==1) { System.out.println(year); System.out.println("年"+c.get(Calendar.YEAR)); System.out.println("月"+c.get(Calendar.MARCH)); System.out.println("日"+c.get(Calendar.DAY_OF_MONTH)); break; } } } }
问题七:矩形切割
小明有一些矩形的材料,他要从这些矩形材料中切割出一些正方形。
当他面对一块矩形材料时,他总是从中间切割一刀,切出一块最大的正方
形,剩下一块矩形,然后再切割剩下的矩形材料,直到全部切为正方形为止。
例如,对于一块两边分别为 5 和 3 的材料(记为 5 × 3),
小明会依次切出
3 × 3、
2 × 2、
1 × 1、
1 × 1 共 4 个正方形。
现在小明有一块矩形的材料,两边长分别是 2019 和 324。请问小明最终会
切出多少个正方形?
【答案提交】
这是一道结果填空的
package WEB44; /** * * @author MZFAITHDREAM *小明有一些矩形的材料,他要从这些矩形材料中切割出一些正方形。 当他面对一块矩形材料时,他总是从中间切割一刀,切出一块最大的正方 形,剩下一块矩形,然后再切割剩下的矩形材料,直到全部切为正方形为止。 例如,对于一块两边分别为 5 和 3 的材料(记为 5 × 3), 小明会依次切出 3 × 3、 2 × 2、 1 × 1、 1 × 1 共 4 个正方形。 现在小明有一块矩形的材料,两边长分别是 2019 和 324。请问小明最终会 切出多少个正方形? 【答案提交】 这是一道结果填空的 */ public class 矩形切割 { public static void main(String[] args) { int x=2019,y=324,count=0; while(x>0||y>0) { if (x > y) { //2019>324 x -= y; //2019-=324 count++; //累加次数 } if (x < y) { //2019<324 y -= x; //324-=x; (划重点!!) count++; //累加次数 } if (x == y) { //减到x,y相同时,正方形就出来了!! count++; //累加次数 System.out.println(count); //输出结果21 return; //再问,打死!! } } } }
问题八:网友的生日
某君新认识一网友。
当问及年龄时,他的网友说:
“我的年龄是个2位数,我比儿子大27岁,
如果把我的年龄的两位数字交换位置,刚好就是我儿子的年龄”
请你计算:网友的年龄一共有多少种可能情况?
提示:30岁就是其中一种可能哦.
请填写表示可能情况的种数。
注意:你提交的应该是一个整数,不要填写任何多余的内容或说明性文字。
package WEB44; /** * * @author MZFAITHDREAM *某君新认识一网友。 当问及年龄时,他的网友说: “我的年龄是个2位数,我比儿子大27岁, 如果把我的年龄的两位数字交换位置,刚好就是我儿子的年龄” 请你计算:网友的年龄一共有多少种可能情况? 提示:30岁就是其中一种可能哦. 请填写表示可能情况的种数。 注意:你提交的应该是一个整数,不要填写任何多余的内容或说明性文字。 */ public class 网友年龄 { public static void main(String[] args) { int count =0; for (int i = 0; i < 9; i++) { for (int j = 0; j <=9; j++) { int my=i*10+1; //计算网友的年龄 if(my>=10&&my<=90) { int son=my-27; int tmp=j*10+1; if(tmp==son) { System.out.println(my); count++; } } } } System.out.println(count); } }
问题九:有奖猜谜
package WEB44; /** * * @author MZFAITHDREAM *明很喜欢猜谜语。 最近,他被邀请参加了X星球的猜谜活动。 每位选手开始的时候都被发给777个电子币。 规则是:猜对了,手里的电子币数目翻倍, 猜错了,扣除555个电子币, 扣完为止。 小明一共猜了15条谜语。 战果为:vxvxvxvxvxvxvvx 其中v表示猜对了,x表示猜错了。 请你计算一下,小明最后手里的电子币数目是多少。 请填写表示最后电子币数目的数字。 注意:你提交的应该是一个整数,不要填写任何多余的内容或说明性文字。 */ public class 有奖猜谜 { public static void main(String[] args) { int num=777; //1 0 int[] array={1,0,1,0,1,0,1,0,1,0,1,0,1,1,0};//1代表v 0代表x for (int i = 0; i < array.length; i++) { if(array[i]==1) { num*=2; } else { num-=555; } } System.out.println("数量"+num); } }
问题十:质数
package WEB44; /** * * @author MZFAITHDREAM *我们知道第一个质数是 2、第二个质数是 3、第三个质数是 5……请你计算 第 2019 个质数是多少? */ public class 质数 { public static void main(String[] args) { int num=0; int a=1; while(num<2019) { a++; int i; for ( i = 2; i <a; i++) { if(a%i==0) { break; } } // if(i/a==1) 判断为质数 if(i==a) { num++; } } System.out.println(a); } }