YTU 2715:函数—判断某年某月某日是这一年中的第几天

http://202.194.119.110/contest.php?cid=2715
Time Limit:1 Sec Memory Limit:128MB

题目描述

在主程序(main)中输入某年某月某日,例如2012 9 18(年月日之间用空格隔开), 调用函数dayth来得到某年某月某日是这一年中是第几天。
注意 在利用dayth函数前要调用isValid_date函数来判断日期是合法的。

dayth函数和isValid_date函数声明如下:

int isValid_date(int year,int month,int day); //判断日期(年月日)是否合法的函数声明,如果日期合法返回1,如果不合法返回0

int dayth(int year,int month,int day); //获取日期(年月日)是本年中的第几天的函数声明

在以下程序的基础上,添加isValid_date函数和dayth函数的定义,使程序能够正确执行。
提交时,只需要提交isValid_date函数和dayth函数的定义代码即可。

#include <iostream>
using namespace std;

int isValid_date(int year,int month,int day); //判断日期(年月日)是否合法的函数声明,如果日期合法返回1,如果不合法返回0

int dayth(int year,int month,int day); //获取日期(年月日)是本年中的第几天的函数声明

int main()
{
int y,m,d; //定义3个变量分别来存放输入的年、月、日
cin>>y>>m>>d;
if(isValid_date(y,m,d) ==0)
cout<<"not valid"<<endl;
else
cout<<dayth(y,m,d)<<endl;
return 0;
}

输入

一个日期(年 月 日)

输出

如果该日期和法则输出该日期是本年中的第几天,如果该日期不合法输出提示信息

例如 输入2002 3 1 输出 60                    输入2008 2 30 输出not valid

样例输入

2002 3 1

样例输出

60

题解

没啥需要多思考的,单纯的麻烦的题而已。主要是这个题能和前面「YTU 2710判断闰年」结合起来,成为最基本的一个新手题。

#include <iostream>
using namespace std;

int isValid_date(int year,int month,int day); //判断日期(年月日)是否合法的函数声明,如果日期合法返回1,如果不合法返回0

int dayth(int year,int month,int day); //获取日期(年月日)是本年中的第几天的函数声明

int main()
{
  int y,m,d; //定义3个变量分别来存放输入的年、月、日
  cin>>y>>m>>d;
  if(isValid_date(y,m,d) ==0)
     cout<<"not valid"<<endl;
  else
     cout<<dayth(y,m,d)<<endl;
  return 0;
}

int isValid_date(int year,int month,int day) //判断日期(年月日)是否合法的函数声明,如果日期合法返回1,如果不合法返回0
{
  int leap,legal,day2;

  if(((year%4 == 0)&&(year%100 != 0))||(year % 400 == 0)) leap = 1; else leap = 0;

  if(month >= 1 && month <= 12)
    {

      switch(month)
        {
          case 1: case 3: case 5: case 7: case 8: case 10: case 12: day2 = 31;break;
          case 4: case 6: case 9: case 11: day2 = 30;break;
          case 2:
            switch(leap)
            {
            case 1:day2 = 29;break;
            case 0:day2 = 28;break;
            }
            break;
        }
      if((day>day2)||(day <= 0)) {legal = 0;return legal;} else {legal = 1;return legal;}
    }
  else {legal = 0;return legal;}
}


int dayth(int year,int month,int day) //获取日期(年月日)是本年中的第几天的函数声明
{
  int sum=0,leap,i,day1[13] = {0,31,28,31,30,31,30,31,31,30,31,30,31},day2[13] = {0,31,29,31,30,31,30,31,31,30,31,30,31};
  if(((year%4 == 0)&&(year%100 != 0))||(year % 400 == 0)) leap = 1; else leap = 0;
  
  if(leap == 1)
    {
    for(i = 1;i< month;i++)
      {
        sum += day2[i];
      }
    sum += day;
    return sum;
    }
  if(leap == 0)
    {
    for(i = 1;i< month;i++)
      {
        sum += day1[i];
      }
    sum += day;
    return sum;
    }
}