函数---判断某年某月某日是这一年中的第几天
时间: 1ms 内存:128M
描述:
在主程序(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
提示:
参考答案(内存最优[920]):
#include <stdio.h>
#include <stdlib.h>
int main()
{
int a1,b,c,s=0,i;
int a[12]= {31,28,31,30,31,30,31,31,30,31,30,31};
scanf("%d%d%d",&a1,&i,&c);
if(a1%4==0&&a1%100!=0||a1%400==0)a[1]=29;
else a[1]=28;
if(i>12||i<1||c>a[i-1]||c<1)printf("not valid");
else
{
for(b=0; b<i-1; b++)
s+=a[b];
s+=c;
printf("%d\n",s);
}
return 0;
}
参考答案(时间最优[0]):
#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){
int a = 1;
int b;
if (!(year >= 1000 && year <= 9999)){
a = 0;
}
if (!(month >= 1 && month <= 12)){
a = 0;
}
if ((year % 100 != 0 && year % 4 == 0) || year % 400 == 0){
b = 1;
}
else{
b = 0;
}
if ((month == 1 || month == 3 || month == 5 || month == 7 || month == 8 || month == 10 || month == 12) && !(day >= 1 && day <= 31)){
a = 0;
}
if ((month == 4 || month == 6 || month == 9 || month == 11) && !(day >= 1 && day <= 30)){
a = 0;
}
if ((b == 1) && !(day >= 1 && day <= 29) && (month == 2)){
a = 0;
}
if ((b == 0) && !(day >= 1 && day <= 28) && (month == 2))
{
a = 0;
}
return a;
}
int dayth(int y, int m, int d){
int tian[13] = { 0, 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31 };
int rtian[13] = { 0, 31, 29, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31 };
int a;
int i;
int day = 0;
if ((y % 100 != 0 && y % 4 == 0) || y % 400 == 0){
a = 1;
}
else{
a = 0;
}
if (a == 1){
for (i = 0; i < m; i++){
day = day + rtian[i];
}
day = day + d;
}
if (a == 0){
for (i = 0; i < m; i++){
day = day + tian[i];
}
day = day + d;
}
return day;
}
题目和答案均来自于互联网,仅供参考,如有问题请联系管理员修改或删除。
