PTA 7-230 美好日子

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”)。

归属知识点
循环结构,数组,选择结构

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值