PTA 7-230 美好日子
分数 10
作者 黄龙军
单位 绍兴文理学院
据说2021年12月2日是一个美好日子,因为这是一个完全对称日!这里认为一个美好日子是一个共8位数字的完全对称日(例如20211202),其中年份占4位,月份、日份都是2位。对于给定的年份,请判断该年是否存在美好日子。
输入格式:
首先输入一个正整数T(<8000)表示测试数据的组数,然后输入T组测试数据。对于每组测试数据,输入一个年份y(2020<y<10000)。
输出格式:
对于每组测试数据,输出一行。若年份y存在美好日子,则输出该日期,否则输出“none”。引号不必输出。
输入样例:
3
2021
2022
2100
输出样例:
20211202
none
none
说明:
2021年12月2日,顺利接娃放学,晚饭没获差评。谨以此题纪念这个美好日子。
代码长度限制
16 KB
时间限制
400 ms
内存限制
64 MB
#include<stdio.h>
int main(){
int count; //定义一个数表示要输入多少个数
scanf("%d", &count);
for (int i = 0; i < count; i++){ //输入这么多个数,每个年份单独处理输出
int year; //定义一个年份
scanf ("%d", &year); //输入年份
int year_yuan = year; //把年份先保存,免得运算破坏了它
int arr[4]; //定义一个数组,存放年份每个数字的倒叙
for (int j = 0; j < 4; j++){ //存放年份的每个数字到数组中,倒着存放的
arr[j] = year%10;
year /= 10;
//printf("arr[%d]:%d\n", j, arr[j]);
}
int month = 0; //定义一个月份
int flag = 1; //变量,将数组的两个元素结合为一个数
for (int k = 1; k >= 0; k--){ //循环将数组的0和1的元素结合变成月份
month += arr[k]*flag;
flag *= 10;
}
//printf("month:%d\n", month);
if(month <= 12 && month >= 1){ //如果月份满足日常生活中的条件,就继续看天数满足不
int day = 0; //定义一个天数
flag = 1; //和上面一样,也是变量
for (int h = 3; h >= 2; h--){ //循环将数组的2和3结合成一个数变成天数
day += arr[h]*flag;
flag *= 10;
}
//printf("day:%d\n",day);
int day_total; //定义一个这个年的这个月的总天数有多少
int arr_day[13]={0,31,28,31,30,31,30,31,31,30,31,30,31}; //这个不是闰年每个月的天数存放在arr1数组里面
if ((year_yuan % 4 == 0 && year_yuan % 100 != 0) || year_yuan % 400 == 0)//是闰年
if (month == 2) //月份是2,闰年天数是29天
day_total = 29;
else
day_total = arr_day[month]; //其他不变
else //不是闰年
day_total = arr_day[month]; //其他不变
if(day <= day_total && day >= 1){ //判断符不符合这个月的天数
printf("%d", year_yuan); //满足,先输出原来的年份
printf("%02d%02d", month, day);
}else{ //月份满足,天数不满足
printf ("none");
}
}else{ //月份不满足
printf("none");
}
printf("\n");
}
return 0;
}
解题思路
判断该年是否存在美好日子的步骤:
step 1:保存年份;
step 2:存放年份的每个数字到数组中;
step 3:确定月份;
step 4:确定天数;
step 5:判断是否符合年份,月份,天数(若年份y存在美好日子,则输出该日期,否则输出“none”)。
归属知识点
循环结构,数组,选择结构