✅回文数
问题描述
1221是一个非常特殊的数,它从左边读和从右边读是一样的,编程求所有这样的四位十进制数。
输出格式
按从小到大的顺序输出满足条件的四位十进制数。
分析
方法一
#include <stdio.h>
int main() {
int i=1000;
for(; i<10000; i++) {
if(i%10 != i /1000)
continue;
if(i/10%10 != i/100%10)
continue;
printf("%d\n",i);
}
return 0;
}
方法二
#include <stdio.h>
int main(){
int i,a,b,c,d;
for(i=1000;i<10000;i++){
a=i/1000;
b=i/100%10;
c=i%100/10;
d=i%10;
if(i==d*1000+c*100+b*10+a){
printf("%d\n",i);
}
}
return 0;
}
方法一和方法二均是分离各个位数,而方法三是利用逆向思维,用分离的数字使之满足条件,组后在整合输出
方法三
#include<stdio.h>
int main()
{
int i,j;
for(i=1;i<=9;i++)
{
for(j=0;j<=9;j++)
{
printf("%d%d%d%d\n",i,j,j,i);
}
}
return 0;
}
✅特殊回文数
问题描述
123321是一个非常特殊的数,它从左边读和从右边读是一样的。
输入一个正整数n, 编程求所有这样的五位和六位十进制数,满足各位数字之和等于n 。
输入格式
输入一行,包含一个正整数n。
输出格式
按从小到大的顺序输出满足条件的整数,每个整数占一行。
样例输入
52
样例输出
899998
989989
998899
数据规模和约定
1<=n<=54。
-
方法一(暴力解法):
解题思路:
代码实现:
#include <stdio.h>
int main(){
int i,n;
int a,b,c,d,e,f;
scanf("%d",&n);
for(i=10000;i<100000;i++){ //五位数
a=i%10; //分离个位数
b=i%100/10; //分离十位数
c=i%1000/100;//分离百位数
d=i/1000%10;//分离千位数
e=i/10000;//分离万位数
if(a+b+c+d+e==n&&a==e&&b==d){
printf("%d\n",i);
}
}
for(i=100000;i<=999999;i++){
a=i%10; //分离个位数
b=i%100/10; //分离十位数
c=i%1000/100;//分离百位数
d=i/1000%10;//分离千位数
e=i/10000%10;//分离万位数
f=i/100000;
if(a+b+c+d+e+f==n&&a==f&&b==e&&c==d){
printf("%d\n",i);
}
}
return 0;
}
-
方法二
代码实现
#include <stdio.h>
int main(){
int n,a,b,c,d,e,f;
scanf("%d",&n);
for(a=1;a<10;a++)
for(b=0;b<10;b++)
for(c=0;c<10;c++)
for(d=0;d<10;d++)
for(e=0;e<10;e++){
if(a+b+c+d+e==n&&a==e&&b==d){
printf("%d\n",a*10000+b*1000+c*100+d*10+e);
}
}
for(a=1;a<10;a++)
for(b=0;b<10;b++)
for(c=0;c<10;c++)
for(d=0;d<10;d++)
for(e=0;e<10;e++)
for(f=0;f<10;f++){
if(a+b+c+d+e+f==n&&a==f&&b==e&&c==d){
printf("%d\n",a*100000+b*10000+c*1000+d*100+e*10+f);
}
}
return 0;
}
-
方法三
代码实现
#include<stdio.h>
int main( )
{
int n;
int a[6];
scanf("%d",&n);
if(n>=1&&n<=54)
{
for(a[0]=0;a[0]<10;a[0]++) //五位数
for(a[1]=0;a[1]<10;a[1]++)
for(a[2]=0;a[2]<10;a[2]++)
for(a[3]=0;a[3]<10;a[3]++)
for(a[4]=0;a[4]<10;a[4]++)
if(a[0]==a[4]&&a[1]==a[3]&&a[0]+a[1]+a[2]+a[3]+a[4]==n)
printf("%d%d%d%d%d\n",a[0],a[1],a[2],a[3],a[4]);//依次输出
}
for(a[0]=0;a[0]<10;a[0]++) //六位数
{
for(a[1]=0;a[1]<10;a[1]++)
for(a[2]=0;a[2]<10;a[2]++)
for(a[3]=0;a[3]<10;a[3]++)
for(a[4]=0;a[4]<10;a[4]++)
for(a[5]=0;a[5]<10;a[5]++)
if(a[0]==a[5]&&a[1]==a[4]&&a[2]==a[3]&&a[0]+a[1]+a[2]+a[3]+a[4]+a[5]==n)
printf("%d%d%d%d%d%d\n",a[0],a[1],a[2],a[3],a[4],a[5]);//依次输出
}
return 0;
}
今天的内容到这里就结束啦~期待与大家一起讨论问题💪