基础练习 特殊回文数

问题描述

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

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

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

样例输入
52

样例输出
899998
989989
998899

数据规模和约定  
1<=n<=54

解决方法

单个枚举,加以判断输出
有两种枚举方法,时间复杂度 方法2 < 方法1

方法1:

#include<iostream>
using namespace std;
int main()
{
 const int _MIN = 10000;
 const int _BOUND = 100000;
 const int _MAX = 999999;
 int n = 0;
 int i;
 int a1,a2,a3,a4,a5,a6;
 cin >> n;
 for(i = _MIN;i < _MAX; i++)
 {
  a1 = i % 10;
  a2 = (i / 10) % 10;
  a3 = (i / 100) % 10;
  a4 = (i / 1000) % 10;
  a5 = (i / 10000) % 10;
  if(i < _BOUND)
  { 
   a6 = 0;
   if((a1 + a2 + a3 + a4 + a5 + a6) == n && a1 == a5 && a2 == a4)
   {
    cout << i << endl;
   }
  }else
  {
   a6 = (i / 100000) % 10;
   if((a1 + a2 + a3 + a4 + a5 + a6) == n && a1 == a6 && a2 == a5 && a3 == a4)
   {
    cout << i << endl;
   }
  } 
 } 
 return 0;
}

直接以数字枚举,通过取余判断条件

#include<iostream>
using namespace std;
 int main()
 { 
 int n,sum; 
 cin>>n; 
 for(int i=1;i<=9;i++)
  {  
  for(int j=0;j<=9;j++)  
  {   
  for(int k=0;k<=9;k++)   
  {    
  sum=0;    
  sum=i*2+j*2+k;    
  if(sum==n)     
  cout<<i<<j<<k<<j<<i<<endl;   
  }  
  } 
  } 
  for(int i=1;i<=9;i++)
   {  
   for(int j=0;j<=9;j++)  
   {  
    for(int k=0;k<=9;k++)  
     {    
     sum=0;    
     sum=i*2+j*2+k*2;   
      if(sum==n)     
      cout<<i<<j<<k<<k<<j<<i<<endl;  
       } 
        }
         }
          return 0;
          }
          ————————————————
版权声明:本文为CSDN博主「烟波煮雨」的原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/qq_37275680/article/details/79473976

直接以每一位进行循环,由于是回文数,因此只需要三个数进行循环
然后仅判断相加是否满足要求即可

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值