特殊回文数问题——算法

回文数

问题描述

问题描述

1221是一个非常特殊的数,它从左边读和从右边读是一样的,编程求所有这样的四位十进制数。

输出格式

按从小到大的顺序输出满足条件的四位十进制数。

问题分析

满足条件:两端相等,长度范围确定。逐一枚举遍历

代码实现

#include <iostream>
#include <bits/stdc++.h>
using namespace std;  
int main(){
	int g,s,b,q;

	//4位数字
	for(int j=1000;j<10000;j++){
		g=j%10;
		s=j/10%10;
		b=j/100%10;
		q=j/1000;
		if(g==q&&s==b)// 第1位等于第4位,第2位等于第3位
			cout<<j<<endl;
	}
	
}

运行结果

1001
1111
1221
1331
1441
1551
1661
1771
1881
1991
2002
2112
2222
2332
2442
2552
2662
2772
2882
2992
3003
3113
3223
3333
3443
3553
3663
3773
3883
3993
4004
4114
4224
4334
4444
4554
4664
4774
4884
4994
5005
5115
5225
5335
5445
5555
5665
5775
5885
5995
6006
6116
6226
6336
6446
6556
6666
6776
6886
6996
7007
7117
7227
7337
7447
7557
7667
7777
7887
7997
8008
8118
8228
8338
8448
8558
8668
8778
8888
8998
9009
9119
9229
9339
9449
9559
9669
9779
9889
9999

--------------------------------
Process exited after 0.2804 seconds with return value 0
请按任意键继续. . .

总结

回文数主要控制范围,以及满足其特征要求逐一遍历即可

特殊回文数

问题描述

问题描述

123321是一个非常特殊的数,它从左边读和从右边读是一样的。
  输入一个正整数n, 编程求所有这样的五位和六位十进制数,满足各位数字之和等于n 。

输入格式

输入一行,包含一个正整数n。

输出格式

按从小到大的顺序输出满足条件的整数,每个整数占一行。

样例输入

52

样例输出

899998
989989
998899

数据规模和约定

1<=n<=54。

问题分析

首先判断是否属于回文数,这里区别在于奇数位与偶数位,奇数位中间数不等于任何两边的,这点与偶数位的不同,同时此处特殊在于,每个数位相加的和要满足等于输入的数字。此处要注意是拆分每一个数位,个、十、百、千、万...的拆分

代码实现

#include <iostream>
#include <string> 
#include <bits/stdc++.h>
using namespace std;  
int main(){
	int num,g,s,b,q,w,sw;
	cin>>num;
	
	//5位数字 
	for(int i=10000;i<100000;i++){
		g=i%10;
		s=i/10%10;
		b=i/100%10;
		q=i/1000%10;
		w=i/10000;
		if(g==w&&s==q&&g+s+b+q+w==num)// 第1位等于第5位,第2位等于第4位;且5位数加起来等于num 
			cout<<i<<endl;
	}
	//6位数字
	for(int j=100000;j<1000000;j++){
		g=j%10;
		s=j/10%10;
		b=j/100%10;
		q=j/1000%10;
		w=j/10000%10;
		sw=j/100000;
		if(g==sw&&s==w&&b==q&&g+s+b+q+w+sw==num)// 第1位等于第5位,第2位等于第4位;且5位数加起来等于num 
			cout<<j<<endl;
	}
	
}

运行结果

44
99899
499994
589985
598895
679976
688886
697796
769967
778877
787787
796697
859958
868868
877778
886688
895598
949949
958859
967769
976679
985589
994499

--------------------------------
Process exited after 2.738 seconds with return value 0
请按任意键继续. . .

总结

回文数的特点在于两端数字分别相等,此处的特殊回文数则需要枚举所有的五位和六位整数,先判断它们是否为回文数,然后再计算所有数字和,判断是否为num。

发布了61 篇原创文章 · 获赞 5 · 访问量 5078

猜你喜欢

转载自blog.csdn.net/qq_38496329/article/details/103997678