#include "stdlib.h" #include "stdio.h" int max=8113-1; int all=0; int runnian(int year) {if((year%4==0&&year%100!=0)||(year%400==0)) return 1; else return 0; }//判断是否是闰年 int jisuan(int year,int month,int day,int a[]) { if(runnian(year)){ a[1]=29; }else{ a[1]=28; } for(int m=month;m<12&&all<max;m++) { for(int d=day;d<=a[m]&&all<max;d++) { all++; if(all==max) { printf("%d-%d-%d",year,m+1,d); return 1; } } }//end for } int main() {int a[12]={31,28,31,30,31,30,31,31,30,31,30,31}; jisuan(1777,4,1,a); for(int i=1778;all<max;i++) { jisuan(i,0,1,a); } printf("\n"); system("pause"); }
20151207,上面用的是循环,并没有刻意针对年份和月份等优化,下面给出一个递归的优化后的代码,由于时间有限,水平有限,就这样了.....:
#include "stdio.h" #include "stdlib.h" int max=8113-1; int all=0; int a[12]={31,28,31,30,31,30,31,31,30,31,30,31}; int runnian(int year) { if((year%4==0&&year%100!=0)||(year%400==0)) return 1; else return 0; }//判断是否是闰年 int jisuan(int year,int month,int day) { int y=year,m=month,d=day; int run=runnian(y); if(run) { a[1]=29; }else{ a[1]=28; } if(all==max) {printf("%d-%d-%d",year,m+1,d); return 1; } if(m==11&&day==a[m]){ y++;//如果是12月 m=0; d=1; all++; return jisuan(y,m,d); } if(day==a[m]){ m++; d=1; all++; return jisuan(y,m,d); } if(run&&(all+366<=max)) { y++; all+=366; return jisuan(y,m,d); }else if(!run&&(all+365<=max)){ y++; all+=365; return jisuan(y,m,d); } if(m<=11&&all+a[m]<=max){ if(m!=11) m++; all+=a[m]; return jisuan(y,m,d); } all++; return jisuan(y,m,d+1); } int main() { jisuan(1777,3,30); printf("\n"); system("pause"); return 1; }