题目:输出从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]);
}
}
}