蓝桥杯真题(一)

1.小蓝每天都锻炼身体。
正常情况下,小蓝每天跑1千米。如果某天是周一或者月初(1日),为了激励自己,小蓝要跑2千米。如果同时是周一或月初,小蓝也是跑2千米。
小蓝跑步已经坚持了很长时间,从2000年1月1日周六(含)到2020年10月1日周四(含)。请问这段时间小蓝总共跑步多少千米?

思路分析:

  1.本题为典型的日期类算法题,我们需要根据给定的日期类参数构造合适的算法;

  2.根据题目要求,可以创建month[ ]数组来存放每个月的天数,让year=2000,mon=1,day=1,weekend=6;

  3.首先,我们要进行循环判断,由于不知道循环次数,选择while()。在循环中,第一步就是要判断该年是不是闰年-->2月的天数。其次,判断每一天是不是1号或者周一,如果是则多跑1km,判断一次day+1,weekend+1;由于day=1和weekend=1是一个或者的关系,所以判断很简单;

  4.日期类参数不同的地方在于要进行日期合法化计算,不能让day>month[mon],也不能让weekend>7

  5.别忘了把最后一天也加上

//跑步问题
	public static void main(String[] args) {
		int month[]={0,31,28,31,30,31,30,31,31,30,31,30,31};
		int year=2000;
		int mon=1;
		int day=1;
		int weekend=6;
		int km=0;
		while(true) {
			//先判断是否为闰年
			if ((year % 4 ==0 && year % 100!=0)|| year %400 ==0){
				month[2]=29;
			}
			else {
				month[2]=28;
			}
			//遍历每一天
			if (day==1 || weekend==1) {
				km+=2;
			}
			else {
				km+=1;
			}
			//下一天和星期变化
			day++;
			weekend++;
			//日期合法化
			if (day>month[mon]) {
				//假如1.32,会变成2.1
				mon++;
				day=1;
				if (mon>12) {
					year++;
					mon=1;
				}
			}
			//weekend合法化
			if (weekend>7) {
				weekend%=7;
			}
			//价值日期2020.10.1也要加上
			if (year==2020 && mon==10 && day==1) {
				km+=2;
				break;
			}
			
		}
		System.out.println(km);
	}

2.小蓝要用七段码数码管来表示一种特殊的文字。

上图给出了七段码数码管的一个图示,数码管中一共有7段可以发光的二极管,分别标记为a,b, c,d, e, f , g。
小蓝要选择一部分二极管(至少要有一个)发光来表达字符。在设计字符的表达时,要求所有发光的二极管是连成一片的。
例如:b发光,其他二极管不发光可以用来表达一种字符。
例如c发光,其他二极管不发光可以用来表达一种字符。这种方案与上一行的方案可以用来表示不同的字符,尽管看上去比较相似。例如: a,b,c, d,e 发光,f , g不发光可以用来表达一种字符。例如: b,f 发光,其他二极管不发光则不能用来表达一种字符,因为发光的二极管没有连成一片。
请问,小蓝可以用七段码数码管表达多少种不同的字符?
 

思路分析:
        在这种分类比较多自己凭借脑神经算法算不出来时,可以尝试排除所有不符合规则的情况;

//七断码数管
	    public static void main(String[] args) {
	        // TODO Auto-generated method stub
	        int n = 0;
	        for (int a = 0; a < 2; a++) {
	            for (int b = 0; b < 2; b++) {
	                for (int c = 0; c < 2; c++) {
	                    for (int d = 0; d < 2; d++) {
	                        for (int e = 0; e < 2; e++) {
	                            for (int f = 0; f < 2; f++) {
	                                for (int g = 0; g < 2; g++) {
	                                	//都发光的情况
	                                    if (a+b+c+d+e+f+g == 1) {
	                                        n++;
	                                        continue;
	                                    }
	                                    //下面是把所有数管亮相邻数管不亮的情况排除掉
	                                    if (a+b+c+d+e+f+g == 0) {

	                                        continue;
	                                    }
	                                    if (a == 1 && b == 0 && f == 0) {

	                                        continue;
	                                    }
	                                    if (b == 1 && a == 0 && g == 0 && c == 0) {

	                                        continue;
	                                    }
	                                    if (c == 1 && b == 0 && g == 0 && d == 0) {

	                                        continue;
	                                    }
	                                    if (d == 1 && c == 0 && e == 0) {

	                                        continue;
	                                    }
	                                    if (e == 1 && d == 0 && g == 0 && f == 0) {

	                                        continue;
	                                    }
	                                    if (f == 1 && a == 0 && g == 0 && e == 0) {

	                                        continue;
	                                    }
	                                    if (g == 1 && b == 0 && c == 0 && e == 0 && f == 0) {

	                                        continue;
	                                    }
	                                    
	                                    if (a+b+c+d+e+f+g != 2) {
	                                    	if (a == 1 && b == 1 && c == 0 && g == 0 && f == 0) {

	                                    		continue;
	                                    	}
	                                    	if (b == 1 && c == 1 && a == 0 && g == 0 && d == 0) {

	                                    		continue;
	                                    	}
	                                    	if (c == 1 && d == 1 && b == 0 && g == 0 && e == 0) {

	                                    		continue;
	                                    	}
	                                    }
	                                    n++;
	                                }
	                            }
	                        }
	                    }
	                }
	            }
	        }
	        System.out.println(n);

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值