LQ0018 顺子日期枚举+日期
Posted 海岛Blog
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了LQ0018 顺子日期枚举+日期相关的知识,希望对你有一定的参考价值。
题目来源:蓝桥杯2022初赛 C++ B组B题
题目描述
小明特别喜欢顺子。顺子指的就是连续的三个数字:123、456 等。
顺子日期指的就是在日期的 yyyymmdd 表示法中,存在任意连续的三位数是一个顺子的日期。
例如20220123 就是一个顺子日期,因为它出现了一个顺子:123;
本题顺子的定义:i j k 是一个顺子,满足 i+1=j、j+1=k、i≥0。
而20221023 则不是一个顺子日期,它一个顺子也没有。
小明想知道在整个2022年份中,一共有多少个顺子日期。
这是一道结果填空的题,你只需要算出结果后提交即可。
本题的结果为一个整数,在提交答案时只输出这个整数,输出多余的内容将无法得分。
问题分析
枚举2022年的每一天,判定一下是不是顺子日期,是的话计数一下就好了。
AC的C语言程序如下:
/* LQ0018 顺子日期 */
#include <stdio.h>
int mdays[] = 0, 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31;
int leapyear(int year)
return ( ((year % 4 == 0) && (year % 100 != 0)) || (year % 400 == 0) ) ? 1 : 0;
int judge(char d[])
for (int i = 1; i <= 6; i++)
if (d[i - 1] + 1 == d[i] && d[i] + 1 == d[i + 1])
return 1;
return 0;
int main()
int y = 2022, m, d, cnt = 0;
char s[8 + 1];
mdays[2] += leapyear(y);
for (m = 1; m <= 12; m++)
for (d = 1; d <= mdays[m]; d++)
sprintf(s, "%d", y * 10000 + m * 100 + d);
if (judge(s))
cnt++;
printf("%d\\n", cnt);
return 0;
以上是关于LQ0018 顺子日期枚举+日期的主要内容,如果未能解决你的问题,请参考以下文章