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);
}