第四题 给年月日求星期 以后不用cin,cout和string了,我爱c语言我爱scanf

来源:互联网 发布:数据库 er设计 编辑:程序博客网 时间:2024/05/06 12:10


//学习字符串截取函数strncpy

//char src[] = {"123456789"};
//strncpy(dest, src, 3);
//puts(dest);
//输出结果为 123


//char dest[4] = {""};
//char src[] = {"123456789"};
//strncpy(dest, src+3, 3);
//puts(dest);
//输出结果为 456
//strncat就是在原有字符上连接一些字符


//strcmp就是
//strcmp(“abcd”,”abcd”)的返回值是 0;
//strcmp(“abcd”,”dcba”)的返回值是 -1;
//strcmp(“dcba”,”abcd”)的返回值是 1;


//str1=”ABCDHG”,str2=”ABCDEF”
//strncmp(str1,str2,4)的返回值是 0;
//strncmp(str1,str2,5)的返回值是 1;


//本代码中主要用到strncmp函数
//再一次被scanf折服了,以后我决定不用cin和cout了也不用string了,就用c语言吧


#include <iostream>
#include <stdio.h>
#include <math.h>
#include <algorithm>
#include <string.h>
#include <string>


using namespace std;


#define leap(x) ((x%4==0&&x%100!=0)||x%400==0)?1:0


int dayinm[13][2]={
0,0,
31,31,
28,29,
31,31,
30,30,
31,31,
30,30,
31,31,31,31,
30,30,
31,31,
30,30,
31,31
};


char month[13][20]={" ","Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec"};
//以后箱这样的数组就定义成固定大小的就好了长一点无所谓的
//就定义成20就好了
//下面使用strncmp,这里就可以偷懒了!!!


char week[8][20]={"","Monday","Tuesday","Wednesday","Thursday","Friday","Saturday","Sunday"};


struct date{
    int day;
    int mon;
    int yea;
    void next()
    {
        day++;
        if(day>dayinm[mon][leap(yea)])
        {
            day=1;
            mon++;
            if(mon>12)
            {
                mon=1;
                yea++;
            }
        }
    }
    void pre()
    {
        day--;
        if(day<1)
        {
            day=dayinm[mon][leap(yea)];
            mon--;
            if(mon<1)
            {
                mon=12;
                yea--;
            }
        }
    }
};


int buf[32][13][5001];


int main()
{
    date tmp;
    tmp.day=9;
    tmp.mon=10;
    tmp.yea=2001;
    int cnt=2;
    while(tmp.yea<5000)
    {
        buf[tmp.day][tmp.mon][tmp.yea] = cnt;
        cnt++;
        if(cnt>7)cnt=1;
        tmp.next();
    }


    tmp.day=9;
    tmp.mon=10;
    tmp.yea=2001;
    cnt=2;
    while(tmp.yea>0)
    {
        buf[tmp.day][tmp.mon][tmp.yea] = cnt;
        cnt--;
        if(cnt<1)cnt=7;
        tmp.pre();
    }
    int ri;
    char yue[20];
//这里一定不可以写成char* 否则不能用scanf读取输入!!!
//不信你试试
//    char* a;
//    scanf("%s",a);
//    getchar();
// 果然他娘的报错了
//以后输入一般长度的东西就定义成固定大小的就好了长一点无所谓的
//就定义成20就好了


    int nian;


    while(scanf("%d%s%d",&ri,yue,&nian)!=EOF)
    {


        int t;
        for(int i=1;i<13;i++) //居然在这个地方的13写成了8,天哪!以后写acm题要注意这些细节!!
        {
//            if(strcmp(month[i],yue)==0)//不要以为这个错了这个很牛逼的,让我来试一试
//            {
//                t=i;
//                break;
//            }
            if(strncmp(month[i],yue,3)==0)//不要以为这个错了这个很牛逼的,yue和month[i]虽然没有填满,但是strcmp知道他们的长度!
            {
                t=i;
                break;
            }
        }
        cout<<week[buf[ri][t][nian]]<<endl;
    }




    return 0;
}