日期识别1
任务描述
X同学最近非常烦,因为他正面对一大堆日期数据愁眉不展,原因是那些日期书写的极其不规范,不仔细辨别根本认不清是哪一天。
以下每个日期中的三个数,年月日的位置是不确定的,假设其中最大的数表示年份,1-12范围的数表示月份,1-31范围的数表示日期,如果月日的范围都是1-12则按前月后日的顺序识别。
例如:
2/3-123 识别为0123年2月3日,合法;
13+12+45 识别为0045年12月13日,合法;
12=3=13 识别为0013年12月3日,合法;
29,2,2019 识别为2019年2月29日,这一天不存在,不合法;
12@12#12 识别为0012年12月12日,合法;
35.36.37 识别为0037年XX月XX日,XX超出月份和日期范围,不合法;
113030 识别为0030年11月30日,合法;
现在X要编程判断一下那些日期到底是否合法,你们说他能编出来吗。
输入格式:
一行,以X-Y-Z形式表示的一个日期,其中X、Y、Z为不超过4位的正整数,“-”为一个分隔字符,可能为任何符号。
输出格式:
若该日期为合法存在的日期,以“YYYY-MM-DD”的形式输出该日期的规范式,年4位,月日2位,不足前补0。
若该日期为不合法日期,输出:Invalid Date!。
输入示例1
25-30-5
输出示例1
0030-05-25
输入示例2
2019-32-09
输出示例2
Invalid Date!
代码
#include <stdio.h>
#include <stdlib.h>
#include <ctype.h>
int main() {
int x, y, z;
int year, month, day;
char separator;
scanf("%d%c%d%c%d", &x, &separator, &y, &separator, &z);
if (x > y && x > z) {
year = x;
if (y <= 12) {
month = y;
day = z;
} else if (y > z) {
month = z;
day = y;
} else {
month = y;
day = z;
}
} else if (y > x && y > z) {
year = y;
if (x <= 12) {
month = x;
day = z;
} else if (x > z) {
month = z;
day = x;
} else {
month = x;
day = z;
}
} else {
year = z;
if (x <= 12) {
month = x;
day = y;
} else if (x > y) {
month = y;
day = x;
} else {
month = x;
day = y;
}
}
if (month < 1 || month > 12 || day < 1 || day > 31) {
printf("Invalid Date!");
return 0;
}
if ((month == 4 || month == 6 || month == 9 || month == 11) && day > 30) {
printf("Invalid Date!");
return 0;
} else if (month == 2) {
if ((year % 4 == 0 && year % 100 != 0) || (year % 400 == 0)) {
if (day > 29) {
printf("Invalid Date!");
return 0;
}
} else {
if (day > 28) {
printf("Invalid Date!");
return 0;
}
}
}
printf("%04d-%02d-%02d", year, month, day);
return 0;
}
标签:12,语言,else,month,日期,year,识别,day
From: https://blog.csdn.net/qq_62717777/article/details/136879340