CCF201509-2-日期计算

来源:互联网 发布:动物建模软件 编辑:程序博客网 时间:2024/05/16 15:35
问题描述
  给定一个年份y和一个整数d,问这一年的第d天是几月几日?
  注意闰年的2月有29天。满足下面条件之一的是闰年:
  1) 年份是4的整数倍,而且不是100的整数倍;
  2) 年份是400的整数倍。
输入格式
  输入的第一行包含一个整数y,表示年份,年份在1900到2015之间(包含1900和2015)。
  输入的第二行包含一个整数d,d在1至365之间。
输出格式
  输出两行,每行一个整数,分别表示答案的月份和日期。
样例输入
2015
80
样例输出
3
21
样例输入
2000
40
样例输出
2
9
#include <iostream>bool ruinian(int a){    if ((a%4==0)&&(a%100!=0))        return true;    else if(a%400==0)        return true;    else        return false;}int main(){    using namespace std;    int year,num,month,day;    cin>>year>>num;    if(ruinian(year))        {            for(month=1;month<=12;month++)            {            if (month==1)                for(day=1;day<=31;day++)                    {if(day==num)                    cout<<month<<endl<<day;}            if (month==2)                for(day=1;day<=29;day++)                    {if(31+day==num)                    cout<<month<<endl<<day;}            if (month==3)                for(day=1;day<=31;day++)                    {if(31+29+day==num)                    cout<<month<<endl<<day;}            if (month==4)                for(day=1;day<=30;day++)                    {if(31+29+31+day==num)                    cout<<month<<endl<<day;}            if (month==5)                for(day=1;day<=31;day++)                    {if(31+29+31+30+day==num)                    cout<<month<<endl<<day;}            if (month==6)                for(day=1;day<=30;day++)                    {if(31+29+31+30+31+day==num)                    cout<<month<<endl<<day;}            if (month==7)                for(day=1;day<=31;day++)                    {if(31+29+31+30+31+30+day==num)                    cout<<month<<endl<<day;}            if (month==7)                for(day=1;day<=31;day++)                    {if(31+29+31+30+31+30+day==num)                    cout<<month<<endl<<day;}            if (month==8)                for(day=1;day<=31;day++)                    {if(31+29+31+30+31+30+31+day==num)                    cout<<month<<endl<<day;}            if (month==9)                for(day=1;day<=31;day++)                    {if(31+29+31+30+31+30+31+31+day==num)                    cout<<month<<endl<<day;}            if (month==10)                for(day=1;day<=31;day++)                    {if(31+29+31+30+31+30+31+31+30+day==num)                    cout<<month<<endl<<day;}            if (month==11)                for(day=1;day<=30;day++)                    {if(31+29+31+30+31+30+31+31+30+31+day==num)                    cout<<month<<endl<<day;}            if (month==12)                for(day=1;day<=31;day++)                    {if(31+29+31+30+31+30+31+31+30+31+30+day==num)                    cout<<month<<endl<<day;}            }        }    else    {for(month=1;month<=12;month++)        {            if (month==1)                for(day=1;day<=31;day++)                    {if(day==num)                    cout<<month<<endl<<day;}            if (month==2)                for(day=1;day<=28;day++)                    {if(31+day==num)                    cout<<month<<endl<<day;}            if (month==3)                for(day=1;day<=31;day++)                    {if(31+28+day==num)                    cout<<month<<endl<<day;}            if (month==4)                for(day=1;day<=30;day++)                    {if(31+28+31+day==num)                    cout<<month<<endl<<day;}            if (month==5)                for(day=1;day<=31;day++)                    {if(31+28+31+30+day==num)                    cout<<month<<endl<<day;}            if (month==6)                for(day=1;day<=30;day++)                    {if(31+28+31+30+31+day==num)                    cout<<month<<endl<<day;}            if (month==7)                for(day=1;day<=31;day++)                    {if(31+28+31+30+31+30+day==num)                    cout<<month<<endl<<day;}            if (month==7)                for(day=1;day<=31;day++)                    {if(31+28+31+30+31+30+day==num)                    cout<<month<<endl<<day;}            if (month==8)                for(day=1;day<=31;day++)                    {if(31+28+31+30+31+30+31+day==num)                    cout<<month<<endl<<day;}            if (month==9)                for(day=1;day<=31;day++)                    {if(31+28+31+30+31+30+31+31+day==num)                    cout<<month<<endl<<day;}            if (month==10)                for(day=1;day<=31;day++)                    {if(31+28+31+30+31+30+31+31+30+day==num)                    cout<<month<<endl<<day;}            if (month==11)                for(day=1;day<=30;day++)                    {if(31+28+31+30+31+30+31+31+30+31+day==num)                    cout<<month<<endl<<day;}            if (month==12)                for(day=1;day<=31;day++)                    {if(31+28+31+30+31+30+31+31+30+31+30+day==num)                    cout<<month<<endl<<day;}        }    }    return 0;}

自己写的这段代码……要被人笑死,简直人算代替机算了,唉还是水平不行啊。下面这段网上下载的代码就比我的好很多:

#include <iostream>using namespace std;int main(){    int monthDay[]={31,28,31,30,31,30,31,31,30,31,30,31};    int year,day;    int count=0;    int month;    cin>>year>>day;    if(((year%4==0)&&(year%100!=0))||(year%400==0))    {        monthDay[1]=29;    }    for(int i=0;i<12,count<day;i++)    {        count+=monthDay[i];        month=i;    }    count-=monthDay[month];    cout<<month+1<<endl<<day-count;    return 0;}
这段代码写得就很巧妙了,用数组简化了很多过程,判断条件放在循环内部,很机智,用一个循环就解决了问题,比我的循环套循环条件套条件不知道高到哪里去了。学习一个。

1 0
原创粉丝点击