蓝桥杯C/C++试题 历届真题 回文日期【第十一届】【省赛】【B组】

纯小白,第一次写对一道算法题,纪念一下~

原题:

 解答:

#include<stdio.h>

int main() {
	//读入输入的日期赋给indata
	int indata;
	scanf("%d", &indata);

	//定义原始输入的日期各个部分并赋值
	int year, month, day;
	day = indata % 100;
	month = indata / 100 % 100;
	year = indata / 10000;

	//定义倒序后的日期的各个部分
	int day2, month2, year2;



	//从输入的年份开始,逐层累加,类似于时钟效果,
	//这里以天为自变量,每30天进一个月,每12个月进一年。

	for (int i = 0; i < 70000; i++) //第一层年份维度的循环
	{
		if ((i + 1) % 6 == 0) { month = month - 1; }

		for (int j = 0; j < 12; j++) //第二层月份维度的循环
		{
			if (month > 12) { month = 0; year = year + 1; }

			for (int k = 0; k < 30; k++)//第三层天维度的循环
			{
				if (day > 30) { day = 0; month = month + 1; }
				else {
					day = day + 1;
				}

				//给倒序后的日期的各个部分赋值
				day2 = day % 10 * 10000000 + day / 10 % 10 * 1000000;
				month2 = month % 10 * 100000 + month / 10 % 10 * 10000;
				year2 = year % 10 * 1000 + year / 10 % 10 * 100 + year / 100 % 10 * 10 + year / 1000 % 10;

				if ((day2 + month2 + year2) == (day + month * 100 + year * 10000)) //判断是否为回文数
				
				{
					printf("%d\n", day + month * 100 + year * 10000);
					i = 99999;

					break;
				}

			}



		}
	}


	//变量初始化
	day = indata % 100;
	month = indata / 100 % 100;
	year = indata / 10000;
	day2 = 0;
	month2 = 0;
	year2 = 0;


	//重复上面操作,改动的地方在于,判断是回文数后,继续进行一次if判断ABABBABA型
	for (int i = 0; i < 70000; i++) {
		if ((i + 1) % 6 == 0) { month = month - 1; }
		for (int j = 0; j < 12; j++) {
			if (month > 12) { month = 0; year = year + 1; }
			for (int k = 0; k < 30; k++) {
				if (day > 30) { day = 0; month = month + 1; }
				else {
					day = day + 1;
				}

				day2 = day % 10 * 10000000 + day / 10 % 10 * 1000000;
				month2 = month % 10 * 100000 + month / 10 % 10 * 10000;
				year2 = year % 10 * 1000 + year / 10 % 10 * 100 + year / 100 % 10 * 10 + year / 1000 % 10;
				if ((day2 + month2 + year2) == (day + month * 100 + year * 10000)) {

					int a = day % 10;
					int b = day / 10 % 10;
					int a02 = month % 10;
					int b02 = month / 10 % 10;
					if ((a == a02) && (b == b02)) {
						printf("%d\n", day + month * 100 + year * 10000);
						i = 99999;
						break;
					}


				}

			}



		}
	}

}















  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值