《数据结构编程实验》 4.1.1Calendar

来源:互联网 发布:如何申请顶级域名 编辑:程序博客网 时间:2024/06/02 01:48

题目大意:

  求2000年1月1日后第n天,求具体日期。


题目地址:

  POJ  2080 ZOJ  2420


题解:

  纯模拟,水题一道,注意闰年闰月划分即可。


#include <iostream>#include <cstdio>using namespace std;int m(int j,int i){    int t[20]={0,31,0,31,30,31,30,31,31,30,31,30,31};    if (j!=2) return t[j];    else    {        if (i%100==0) if(i%400==0) return 29;else return 28;        else if (i%4==0) return 29;             else return 28;    }    return 0;}int main(){    int date,i,j,k,l;    int y[10000];    char week[10][20]={"Friday","Saturday","Sunday","Monday","Tuesday","Wednesday","Thursday"};    y[2000]=366;    for (i=2001;i<10000;i++)    {        if (i%100==0) if(i%400==0) y[i]=366;else y[i]=365;        else if (i%4==0) y[i]=366;else y[i]=365;        y[i]=y[i]+y[i-1];    }    while (scanf("%d",&date)&&date!=-1)    {        date++;        l=date%7;        for (i=2000;date>y[i];i++);        date=date-y[i-1];        for (j=1;date>m(j,i);j++) date=date-m(j,i);        k=date;        printf("%d-",i);        if (j<10) printf("0");        printf("%d-",j);        if (k<10) printf("0");        printf("%d ",k);        printf("%s\n",week[l]);    }    return 0;}


0 0