颂. 2022-03-06 23:40 采纳率: 80%
浏览 25
已结题

蓝桥杯-回文日期,我这样写,在蓝桥杯真题训练里为啥没有输出

半小时写的代码,没注意优化
但在vs里运行是没任何问题的
在蓝桥杯模拟上就没法输出,是啥情况?
闰年感觉不需要考虑,最高是到8999年,而闰年的2月29对应9220年。
题目:给定一个 8 位数的日期,请你计算该日期之后下一个回文日期和下一个 ABABBABA 型的回文日期各是哪一天。

#include <stdio.h>
#include <stdlib.h>

int main(int argc, char* argv[])
{
    long date;
    scanf_s("%d", &date);
    int y = date / 10000;
    int m = date % 10000 / 100;
    int d = date % 100;
    int year = y, month = m, day = d + 1;
    int j, k;
    int first = 1, second = 1;
    for (int i = year; i < 9000 && (second == 1 || first == 1); i++) {
        for (j = month; j < 13 && (second == 1 || first == 1); j++) {
            int maxday = 0;
            switch (j)
            {
            case 1:
                maxday = 31;
                break;
            case 2:
                maxday = 28;
                break;
            case 3:
                maxday = 31;
                break;
            case 4:
                maxday = 30;
                break;
            case 5:
                maxday = 31;
                break;
            case 6:
                maxday = 30;
                break;
            case 7:
                maxday = 31;
                break;
            case 8:
                maxday = 31;
                break;
            case 9:
                maxday = 30;
                break;
            case 10:
                maxday = 31;
                break;
            case 11:
                maxday = 30;
                break;
            case 12:
                maxday = 31;
                break;
            default:
                break;
            }
            for (k = day; k <= maxday && (second == 1 || first == 1); k++)
            {
                if (first == 1 && i == j % 10 * 10 + j / 10 + k % 10 * 1000 + k / 10 * 100) {
                    printf("%d%d%d%d%d\n", i, j / 10, j % 10, k / 10, k % 10);
                    first = 0;
                }

                if (first == 0 && second == 1 && i == j % 10 * 10 + j / 10 + k % 10 * 1000 + k / 10 * 100 && (j / 10 + j % 10 * 10) == (k / 10 + k % 10 * 10)) {
                    printf("%d%d%d%d%d", i, j / 10, j % 10, k / 10, k % 10);
                    second = 0;
                }
            }
            if (k == maxday + 1) day = 1;
        }
        if (j == 13) month = 1;
    }
    return 0;
}
  • 写回答

0条回答 默认 最新

    报告相同问题?

    问题事件

    • 系统已结题 3月14日
    • 修改了问题 3月7日
    • 创建了问题 3月6日

    悬赏问题

    • ¥15 Xsheii7我安装这个文件的时候跳出来另一个文件已锁定文件的无一部分进程无法访问。这个该怎么解决
    • ¥15 unity terrain打包后地形错位,跟建筑不在同一个位置,怎么办
    • ¥15 FileNotFoundError 解决方案
    • ¥15 uniapp实现如下图的图表功能
    • ¥15 u-subsection如何修改相邻两个节点样式
    • ¥30 vs2010开发 WFP(windows filtering platform)
    • ¥15 服务端控制goose报文控制块的发布问题
    • ¥15 学习指导与未来导向啊
    • ¥15 求多普勒频移瞬时表达式
    • ¥15 如果要做一个老年人平板有哪些需求