链接:
https://www.nowcoder.com/acm/contest/115/B
来源:牛客网
来源:牛客网
给出一个出生日期,比如:1999-09-09,
问:从出生那一天开始起,到今天2018-04-21为止(包括出生日期和今天),有多少天,年月日都不包含数字4?
问:从出生那一天开始起,到今天2018-04-21为止(包括出生日期和今天),有多少天,年月日都不包含数字4?
输入描述:
第一行输入一个整数T(表示样例个数) 接下来T组样例 每个样例一行,包含一个字符串“yyyy-mm-dd”(1990<=yyyy<=2018) 题目保证测试数据的正确性
输出描述:
输出题意要求的天数
输入
1 1999-09-09输出
5020一开始自己的方法很容易出现有的内容没有考虑到 这样的题用一个while循环一天天累加外加调用判断函数 这样不容易遗漏情况超时以后不能写这种头铁的代码了.....#include<bits/stdc++.h> using namespace std; int day[13]={0,28,25,28,0,28,27,28,28,27,28,27,28}; int run(int x) { int k=x; int temp; while(k>0) { temp=k%10; k=k/10; if(temp==4) return 0; } int ans=0; if(x%4==0&&x%100!=0||x%400==0) { ans=303; } else ans=302; return ans; } int main() { int y,m,d; while(scanf("%d-%d-%d",&y,&m,&d)!=EOF) { int i; int sum=0; for(i=y+1;i<2018;i++) { sum+=run(i); } int k=run(y); int yday=0; for(i=0;i<m;i++) yday+=day[i]; int dday=0; if(d<4) dday=d; else if(d<14) dday=d-1; else if(d>=14&&d<24) dday=d-2; else if(d>=24) dday=d-3; k=k-yday-dday+1; sum=sum+k+81; printf("%d\n",sum); } return 0; }
AC代码#include<bits/stdc++.h> using namespace std; int a[]={0,31,29,31,30,31,30,31,31,30,31,30,31}; int b[]={0,31,28,31,30,31,30,31,31,30,31,30,31}; int year(int y ,int m,int d) { while(y||m||d) { if(y%10==4||m%10==4||d%10==4) return 0; y=y/10; m=m/10; d=d/10; } return 1; } int run(int x) { if(x%400==0||x%4==0&&x%100!=0) return 1; else return 0; } /* int cntd(int d) { int dday=0; if(d<4) dday=d; else if(d<14&&d>=4) dday=d-1; else if(d>=14&&d<24) dday=d-2; else if(d>=24) dday=d-3; return dday; }*/ int main() { int t; cin>>t; while(t--) { int y,m,d; scanf("%d-%d-%d",&y,&m,&d); int i; int sum=0; while(1) { if(y==2018&&m==4&&d>21) break; sum+=year(y,m,d); d++; if(run(y)) { if(d>a[m]) { d=1; m++; } if(m>12) { y++; m=1; } } else { if(d>b[m]) { d=1; m++; } if(m>12) { y++; m=1; } } } cout<<sum<<endl; } return 0; }