记录于2019/11/8 1:00
语言标准(-std)
ISO C99
输入
三个正整数
输出
OK
NO
测试用例
1200 2 29
输出 OK
1900 2 29
输出 NO
2019 2 29
输出 NO
2018 4 31
输出 NO
2017 13 1
输出 NO
2016 1 0
输出 NO
2015 0 28
输出 NO
2019 12 12
输出 OK
代码片(C)
反思1:bool, else
使用出错.
#include <stdio.h>
#include <stdbool.h>
int main()
{
int year, month, day;
bool y,m,d;
while(scanf("%d%d%d",&year,&month,&day) != EOF)
{
/*year*/
if(year >= 0)
y = 1;
else
y = 0;
/*month*/
if(month >= 1 && month <= 12)
m = 1;
else
m = 0;
/*day==30*/
if(month == 4 || month == 6 || month == 9 || month == 11)
{
if(day >= 1 && day <= 30)
d = 1;
else
d = 0;
}
/*day==28 or 29*/
if(month == 2)
//此处应该在if前加一个else,保证执行与此if匹配的else语句块时
//不会重复执行覆盖掉当month为(4.6.9.11)时的d值
{
if((year%4 == 0 && year%100 != 0) || (year%400 == 0))
{
if(day >= 1 && day <= 29)
d = 1;
else
d = 0;
}
else
{
if(day >= 1 && day <= 28)
d = 1;
else
d = 0;
}
}
/*day==31*/
//这里本意是希望执行
//else if(month == 1 || month == 3 || month == 5 || month == 7 || month == 8 || month == 10 || month ==12)
else
{
if(day >= 1 && day <= 31)
d = 1;
else
d = 0;
}
/*bool*/
if(y == 1 && m == 1 && d == 1)
printf("OK\n");
else
printf("NO\n");
}
return 0;
}
函数(isValid_date)
#include <stdio.h>
int isValid_date(int year, int month, int day); //判断日期(年月日)是否合法的函数声明
int main()
{
int y, m, d; //定义3个变量分别来存放输入的年、月、日
while(scanf("%d%d%d", &y, &m, &d) != EOF)
{
if (isValid_date(y, m, d) == 1)
printf("OK\n");
else
printf("NO\n ");
}
return 0;
}
int isValid_date(int year, int month, int day)//判断日期(年月日)是否合法的函数定义
{
int leap = 0; //判断闰年的标记
if (month < 1 || month>12 || day < 1 || day>31)
return 0; //返回不合法
if ((month == 4 || month == 6 || month == 9 || month == 11) && (day == 31))
return 0;//返回不合法
if ((year % 4 == 0 && year % 100 != 0) || year % 400 == 0)//判断是否是闰年
leap = 1; //是闰年
if ((leap == 1 && month == 2 && day > 29) || (leap == 0 && month == 2 && day > 28))
return 0;//返回不合法
return 1; //返回合法
}
请参考:最简单的C语言判断日期合法性函数
#include <stdio.h>
int isValid_date(int year, int month, int day);
int main()
{
int y, m, d;
while(scanf("%d%d%d", &y, &m, &d) != EOF)
{
if (isValid_date(y, m, d) == 1)
printf("OK\n");
else
printf("NO\n");
}
return 0;
}
int isValid_date(int year,int month,int day)
{
int Month[12] = {31,28,31,30,31,30,31,31,30,31,30,31};
if (month==2)
((year%4 == 0 && year%100 != 0) || (year%400 == 0)) ? Month[1]+=1 : Month[1];
if (month>12 || month<1 || day>Month[month-1] || day<1)
return 0;
return 1;
}