函数---判断某年某月某日是这一年中的第几天

函数---判断某年某月某日是这一年中的第几天

时间: 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;

}


题目和答案均来自于互联网,仅供参考,如有问题请联系管理员修改或删除。

点赞

发表评论

电子邮件地址不会被公开。必填项已用 * 标注