所有对称日

题目:输出从1000年到3000年的所有对称日

解题思路:先将定义三个数组分别代表不同天数的三种月份,在使用双重循环,外层循环年份,内层为各月份的循环,内层循环中先将日期两个数逆序在乘100加上月份的逆序,算出的值如果等于该年份,即为对称日。然后采用暴力重复这个过程,分别从一月到十二月。

#include <stdio.h>

int main() {
	int a[31] = {01, 02, 03, 04, 05, 06, 07, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31}; //定义大月的数组
	int b[28] = {01, 02, 03, 04, 05, 06, 07, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28}; //小月的数组
	int c[30] = {01, 02, 03, 04, 05, 06, 07, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30}; //2月的数组
	int i;
	int x, y, z;
	int year;

	for (year = 1000; year <= 3000; year++) {

		for (i = 0; i < 31; i++) {

			x = (a[i] % 10) * 10 + a[i] / 10;//这一年的一月,一月有31天用a数组,用该式计算日期的对称数
			y = 10;//1月的对称数字
			z = x * 100 + y;//将年份的4位数逆序

			if (year == z)//如果逆序后的数字为年份则为对称日,输出
				printf("%d01%d\n", year, a[i]);
		}//之后各月与一月同理

		for (i = 0; i < 28; i++) {

			x = (b[i] % 10) * 10 + b[i] / 10;
			y = 20;
			z = x * 100 + y;

			if (year == z)
				printf("%d02%d\n", year, b[i]);
		}

		for (i = 0; i < 31; i++) {

			x = (a[i] % 10) * 10 + a[i] / 10;
			y = 30;
			z = x * 100 + y;

			if (year == z)
				printf("%d03%d\n", year, a[i]);
		}

		for (i = 0; i < 30; i++) {

			x = (c[i] % 10) * 10 + c[i] / 10;
			y = 40;
			z = x * 100 + y;

			if (year == z)
				printf("%d04%d\n", year, c[i]);
		}

		for (i = 0; i < 31; i++) {

			x = (a[i] % 10) * 10 + a[i] / 10;
			y = 50;
			z = x * 100 + y;

			if (year == z)
				printf("%d05%d\n", year, a[i]);
		}

		for (i = 0; i < 30; i++) {

			x = (c[i] % 10) * 10 + c[i] / 10;
			y = 60;
			z = x * 100 + y;

			if (year == z)
				printf("%d06%d\n", year, c[i]);
		}

		for (i = 0; i < 31; i++) {

			x = (a[i] % 10) * 10 + a[i] / 10;
			y = 70;
			z = x * 100 + y;

			if (year == z)
				printf("%d07%d\n", year, a[i]);
		}


		for (i = 0; i < 31; i++) {

			x = (a[i] % 10) * 10 + a[i] / 10;
			y = 80;
			z = x * 100 + y;

			if (year == z)
				printf("%d08%d\n", year, a[i]);
		}

		for (i = 0; i < 30; i++) {

			x = (c[i] % 10) * 10 + c[i] / 10;
			y = 90;
			z = x * 100 + y;

			if (year == z)
				printf("%d09%d\n", year, c[i]);
		}

		for (i = 0; i < 31; i++) {

			x = (a[i] % 10) * 10 + a[i] / 10;
			y = 01;
			z = x * 100 + y;

			if (year == z)
				printf("%d10%d\n", year, a[i]);
		}

		for (i = 0; i < 30; i++) {

			x = (c[i] % 10) * 10 + c[i] / 10;
			y = 11;
			z = x * 100 + y;

			if (year == z)
				printf("%d11%d\n", year, c[i]);
		}

		for (i = 0; i < 31; i++) {

			x = (a[i] % 10) * 10 + a[i] / 10;
			y = 21;
			z = x * 100 + y;

			if (year == z)
				printf("%d12%d\n", year, a[i]);
		}
	}
}

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值