碰到模拟题,如果思路不清晰就头疼,要理清思路很久,
做这么一个简单的题目,又心急又焦虑,还容易影响心态。
所以还是要好好练模拟题啊!
日期题初次尝试的代码块:
int day1[12]={31,28,31,30,31,30,31,31,30,31,30,31};
int day2[12]={31,29,31,30,31,30,31,31,30,31,30,31};
int cul(int n){
int cnt=0;
while(n){
cnt+=n%10;
n/=10;
}
return cnt;
}
bool check(int n){
while(n){
if(n%10==4) return false;
n/=10;
}
return true;
}
bool ac(int n){
if(n%100!=0&&n%4==0||n%400==0) return true;
return false;
}
int main(){
int cnt=0;
int i=2020,j=2,k=22;
for(;;++i){
for(;;++j){
for(;;++k){
if((cul(i)+cul(j)+cul(k))%8==0&&check(i)&&check(j)&&check(k)){
cnt++;
printf("%02d/%02d/%02d %d\n",i,j,k,cnt);
}
if(cnt==88) break;
if(ac) if(k==day1[j-1]) {
k=1;
break;
}
else if(k==day2[j-1]) {
k=1;
break;
}
}
if(cnt==88) break;
if(j==12){
j=1;break;
}
}
if(cnt==88) break;
}
很丑很low啊但是能理清楚思路就行!
1.设i,j,k在最开头设然后赋值,不要在for循环里设并赋值,这样断然是错误的。
2.虽然接力break很sb,但是我暂时只能想到这个方法。
ps:可以用子函数的方式啊!到88直接return就好了呃 每次都忘了。。
3.闰年是不是百年但是能被四整除 或者 能被四百整除