【模拟】日期变化

碰到模拟题,如果思路不清晰就头疼,要理清思路很久,
做这么一个简单的题目,又心急又焦虑,还容易影响心态。
所以还是要好好练模拟题啊!

日期题初次尝试的代码块:

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.闰年是不是百年但是能被四整除 或者 能被四百整除

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值