http://202.194.119.110/problem.php?id=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; } }