• 蓝桥杯回文日期C语言


    题目描述

    2020 年春节期间,有一个特殊的日期引起了大家的注意:2020 年 2 月 2 日。因为如果将这个日期按 “yyyymmdd” 的格式写成一个 8 位数是 20200202,恰好是一个回文数。我们称这样的日期是回文日期。

    有人表示 20200202 是 “千年一遇” 的特殊日子。对此小明很不认同,因为不到 2 年之后就是下一个回文日期:20211202 即 2021 年 12 月 2 日。

    也有人表示 20200202 并不仅仅是一个回文日期,还是一个 ABABBABA 型的回文日期。对此小明也不认同,因为大约 100 年后就能遇到下一个 ABABBABA 型的回文日期:21211212 即 2121 年 12 月 12 日。算不上 “千年一遇”,顶多算 “千年两遇”。

    给定一个 8 位数的日期,请你计算该日期之后下一个回文日期和下一个 ABABBABA 型的回文日期各是哪一天。

    输入描述

    输入包含一个八位整数 NN,表示日期。

    对于所有评测用例,10000101 \leq N \leq 8999123110000101≤N≤89991231,保证 NN 是一个合法日期的 8 位数表示。

    输出描述

    输出两行,每行 1 个八位数。第一行表示下一个回文日期,第二行表示下一个 ABABBABA 型的回文日期。

    输入输出样例

    示例

    输入

    20200202

    输出

    20211202
    21211212

    运行限制

    • 最大运行时间:1s
    • 最大运行内存: 256M

    题解

    #include 
    #include 
    #include 
    
    char* itoa(int value,char* buff,unsigned int radix) {
    	char index[] = "0123456789abcdefghijklmnopqrstuvwxyz";
    	unsigned int temp = (unsigned int)value;
    	int flag = value < 0 && radix == 10 ? 1 : 0;
    	if (flag == 1) {
    		buff[0] = '-';
    		temp *= -1;
    	}
    	int i = flag;
    	for (; temp != 0;i++) {
    		buff[i] = index[temp % radix];
    		temp /= radix;
    	}
    	buff[i] = '\0';
    	for (int j = 0; j < (i - flag)/2;j++) {
    		int temp = buff[j+flag];
    		buff[j + flag] = buff[i - 1 - j];
    		buff[i - 1 - j] = temp;
    	}
    	return buff;
    }
    
    int checkVaild(int date) {
    	int year = date / 10000;
    	int month = date % 10000 / 100;
    	int day = date % 100;
    	int months[] = {0, 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31};
    	if (!month || month >= 13 || !day) return 0;
    	if (month != 2 && day > months[month]) return 0;
    	if (month == 2) {
    		int leap = year % 4 == 0 && year % 100 || year % 400 == 0;
    		if (day > 28 + leap) return 0;
    	}
    	return 1;
    }
    
    int isPalindromeOrABABBABA(char *s){
    	int len = strlen(s),flag = 1;
    	for(int i=0,j = len-1;i<len,j>-1;i++,j--){
    		if(s[i]!=s[j]){
    			flag = 0;
    		}
    	}
    	if(s[0]==s[2]&&s[1]==s[3]&&s[4]==s[6]&&s[5]==s[7]&&s[0]==s[5]&&s[1]==s[6]){
    		flag = 2;
    	}
    	return flag;
    }
    
    
    int main()
    {
    	char date[9],str[9];
    	int flag = 0;
    	scanf("%s",date);
    	for(int i=atoi(date)+1;i<=99999999;i++){
        if(!checkVaild(i)) continue;
        itoa(i,str,10);
    		if((isPalindromeOrABABBABA(str)==1 || isPalindromeOrABABBABA(str)==2) && flag == 0 ){
    			printf("%d\n",i);
    			flag = 1;
    		}
    		if(isPalindromeOrABABBABA(str)==2 && flag==1){
    			printf("%d",i);
    			break;
    		}
    	}
    	return 0;
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42
    • 43
    • 44
    • 45
    • 46
    • 47
    • 48
    • 49
    • 50
    • 51
    • 52
    • 53
    • 54
    • 55
    • 56
    • 57
    • 58
    • 59
    • 60
    • 61
    • 62
    • 63
    • 64
    • 65
    • 66
    • 67
    • 68
    • 69
    • 70
    • 71
    • 72
    • 73

    在这里插入图片描述

  • 相关阅读:
    angular1.0常用总结
    【序列召回推荐】(task3)GNN召回之SR-GNN
    python从入门到出家(五)循环语句
    2022年双循环行业研究报告
    Vue07/Vue 具名插槽 及 作用域插槽( 带数据插槽 ) 作用介绍和说明
    18.客户端会话技术Cookie
    Python中的多线程(史上最简单易懂版)
    5款高效率,但是名气不大的小众软件
    项目团队情绪管理的几点注意事项
    jQuery 树型菜单完整代码
  • 原文地址:https://blog.csdn.net/L6666688888/article/details/128169222