【蓝桥】“世界完全对称日”数目(蓝桥杯原创练习题)

题目:完全对称日(自编题)

【问题描述】
2020年2月2日是农历正月初九,不少人称之寓意为长长久久,又因其完整写法“20200202”谐音为“爱你爱你你爱你爱”,被网友戏称为千年一遇的“完全对称日”。

然而,“完全对称日”真的是千年一遇吗?

实则不然,比如下一次的“完全对称日”在2021年12月2日(20211202),再下一次是在2030年3月2日(20300302)。

请统计出从公元1000年1月1日到公元9999年12月31日一共出现过多少次“完全对称日”?

请提交一个整数,不要填写任何多余的内容(比如,说明文字)

完全对称日解法1:遍历年份判断日期

#include <iostream>
using namespace std;
int a[13]= {-1,31,28,31,30,31,30,31,31,30,31,30,31};
int main()
{
	int m,d,sum=0;
	for(int i=1000; i<=9999; i++) {
		m=(i%10)*10+(i/10)%10;		//对称后的月份数(对应年份的个位和十位)
		if(m>0&&m<=12) {
			d=((i/100)%10)*10+i/1000; //对称后的日期数(对应年份的百位和千位)
			if(d<=a[m]) //日期d满足当前月份的范围(本题中d不会为0) 
				sum++;	//累加符合条件的对称数 
		}
	}
	cout<<sum+1<<endl;  //关于闰年特判,有且只有一次:92200229,故记得+1 
	return 0;
}
//331 

完全对称日解法2:遍历日期判断年份

#include <iostream>
using namespace std;
int Mon[13]= {-1,31,29,31,30,31,30,31,31,30,31,30,31};
int main()
{
	int sum=0;
	for(int m=1; m<=12; m++) {
		int m1=m/10,m2=m%10;  //月份的十位和个位
		for(int d=1; d<=Mon[m]; d++) {
			int d1=d/10,d2=d%10; //日期的十位和个位
			int y=d2*1000+d1*100+m2*10+m1;
			if(y>=1000) {
				sum++;
				cout<<y<<m1<<m2<<d1<<d2<<endl;
			}
		}
	}
	cout<<sum<<endl;
	return 0;
}
//331

解法3:
一年最多366天,日期数个位数为0均不符合条件,除2月外,每个月有3天为日期个位为0(10号、20号、30号)
则 366-(12*3-1)=331

为了完整输出专门写的程序

#include <iostream>
using namespace std;
int a[13]= {-1,31,28,31,30,31,30,31,31,30,31,30,31};
bool leap(int y){
	return y%4==0&&y%100!=0||y%400==0;
} 
int main()
{
	int y1,y2,y3,y4,m,d,sum=0;
	for(int i=1000; i<=9999; i++) {
		y1=i/1000;   	//年份的千位
		y2=(i/100)%10;	//年份的百位
		y3=(i/10)%10;	//年份的十位
		y4=i%10;		//年份的个位
		m=y4*10+y3;		//对称后的月份数

		if(m>0&&m<=12) {
			d=y2*10+y1; //对称后的日期数
			if(d<=a[m]||leap(i)&&m==2&&d==29) { //关于闰年,其实只有一次:92200229 
				sum++;	//累加符合条件的对称数
				cout<<i<<y4<<y3<<y2<<y1<<endl; //
			}			
		}
	}
	cout<<sum<<endl;  
	return 0;
}

相应结果:

10011001
10100101
10111101
10200201
10211201
10300301
10400401
10500501
10600601
10700701
10800801
10900901
11011011
11100111
11111111
11200211
11211211
11300311
11400411
11500511
11600611
11700711
11800811
11900911
12011021
12100121
12111121
12200221
12211221
12300321
12400421
12500521
12600621
12700721
12800821
12900921
13011031
13100131
13211231
13300331
13500531
13700731
13800831
20011002
20100102
20111102
20200202
20211202
20300302
20400402
20500502
20600602
20700702
20800802
20900902
21011012
21100112
21111112
21200212
21211212
21300312
21400412
21500512
21600612
21700712
21800812
21900912
22011022
22100122
22111122
22200222
22211222
22300322
22400422
22500522
22600622
22700722
22800822
22900922
30011003
30100103
30111103
30200203
30211203
30300303
30400403
30500503
30600603
30700703
30800803
30900903
31011013
31100113
31111113
31200213
31211213
31300313
31400413
31500513
31600613
31700713
31800813
31900913
32011023
32100123
32111123
32200223
32211223
32300323
32400423
32500523
32600623
32700723
32800823
32900923
40011004
40100104
40111104
40200204
40211204
40300304
40400404
40500504
40600604
40700704
40800804
40900904
41011014
41100114
41111114
41200214
41211214
41300314
41400414
41500514
41600614
41700714
41800814
41900914
42011024
42100124
42111124
42200224
42211224
42300324
42400424
42500524
42600624
42700724
42800824
42900924
50011005
50100105
50111105
50200205
50211205
50300305
50400405
50500505
50600605
50700705
50800805
50900905
51011015
51100115
51111115
51200215
51211215
51300315
51400415
51500515
51600615
51700715
51800815
51900915
52011025
52100125
52111125
52200225
52211225
52300325
52400425
52500525
52600625
52700725
52800825
52900925
60011006
60100106
60111106
60200206
60211206
60300306
60400406
60500506
60600606
60700706
60800806
60900906
61011016
61100116
61111116
61200216
61211216
61300316
61400416
61500516
61600616
61700716
61800816
61900916
62011026
62100126
62111126
62200226
62211226
62300326
62400426
62500526
62600626
62700726
62800826
62900926
70011007
70100107
70111107
70200207
70211207
70300307
70400407
70500507
70600607
70700707
70800807
70900907
71011017
71100117
71111117
71200217
71211217
71300317
71400417
71500517
71600617
71700717
71800817
71900917
72011027
72100127
72111127
72200227
72211227
72300327
72400427
72500527
72600627
72700727
72800827
72900927
80011008
80100108
80111108
80200208
80211208
80300308
80400408
80500508
80600608
80700708
80800808
80900908
81011018
81100118
81111118
81200218
81211218
81300318
81400418
81500518
81600618
81700718
81800818
81900918
82011028
82100128
82111128
82200228
82211228
82300328
82400428
82500528
82600628
82700728
82800828
82900928
90011009
90100109
90111109
90200209
90211209
90300309
90400409
90500509
90600609
90700709
90800809
90900909
91011019
91100119
91111119
91200219
91211219
91300319
91400419
91500519
91600619
91700719
91800819
91900919
92011029
92100129
92111129
92200229
92211229
92300329
92400429
92500529
92600629
92700729
92800829
92900929
331

说明

本题题目确实为个人原创(看到“完全对称日”概念,自然会好奇具体有几个),但有类似想法的人也不在少数,所以网上能找到不少关于“完全对称日”的博客。

突然觉得,牛顿和莱布尼茨分别独立创立微积分,和我这里出现的雷同问题有几分异曲同工之妙吧。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值