刷题 | 回文数字

回文数字问题

问题描述
  观察数字:12321,123321 都有一个共同的特征,无论从左到右读还是从右向左读,都是相同的。这样的数字叫做:回文数字。

  本题要求你找到一些5位的十进制数字。满足如下要求:
  该数字的各个数位之和等于输入的整数。将这些数按从小到大排序后输出,一行一个
输入格式
  一个正整数 n (10<n<100), 表示要求满足的位数和。
输出格式
  若干行,每行包含一个满足要求的5位数。
  数字按从小到大的顺序排列。
  如果没有满足条件的,输出:-1
样例输入
44
样例输出
99899

样例输入
55
样例输出
-1

问题解析

关键在于将5位回文数字拆开,判断5位回文数字之和是否等于输入数字 n:若等于,则输出该回文数字。迭代所有5位回文数字,最后判断是否存在符合要求的回文数字,若不存在,输出-1。

如:输入n(10<n<100),5位回文数字为ABCBA(9999<ABCBA<100000),即判断(A+B)*2+C == n还是 (A+B)*2+C != n


代码答案


JAVA代码

import java.util.Scanner;  
  
public class Hello {  
  
    
    // @param args 
       
    public static void main(String[] args) 
    {    
        // 1. 输入n
    	Scanner in = new Scanner(System.in);  
        int n = in.nextInt();  
        int num = 0;  
        // 2. 限制在5位数
        for (int i = 10000; i < 100000; i++) {  
        	// 3. 判断是不是回文
            if (is_huiwen(i)) {  
            	// 4. 判断是否符合要求 
                if (f(i) == n) {  
                	// 5. 正常输出
                    System.out.println(i);  
                    num++;  
                }  
            }  
        }  
        // 6. 判断是否存在符合要求的数字
        if(num==0){  
            System.out.println(-1);  
        }  
    }  
  
    private static int f(int b) {  
        int sum = 0;  
        int t;  
        int m = b;  
        // 计算前两位数的和 = 后两位数的和  
        for (int i = 0; i < 2; i++) {  
            t = m % 10;  
            sum += t;  
            m /= 10;  
        }  
       
        sum *= 2;  
        sum += (m % 10);  
        
        return sum;  
    }  
  
    private static boolean is_huiwen(int b) {  
        String s = String.valueOf(b);      //数字转换为字符串  
        char[] c = s.toCharArray();        //字符串转换为字符数组  
        for (int i = 0, j = s.length() - 1; i < s.length(); i++, j--) {  
            if (i == j || j < i)  
                break;  
            if (c[i] != c[j])  
                return false;  
        }  
        return true;  
    }  
  
} 


Python代码

n = int(input())
ls  = []
ls2 = []
for i in range(9):
    i +=1
    
    bit_5 = i
    for j in range(10):
        bit_4 = j
        for k in range(10):
            if n == i+j+k+bit_4 + bit_5:
                str_huiwen = str(i)+str(j)+str(k)+str(bit_4)+str(bit_5)
                ls.append(str_huiwen)
           
if ls == []:
    print(-1)
    
else:
    for m in range(len(ls)):
        ls2.append(int(ls[m]))
                     
for z in range(len(ls2)):    
    print(ls2[z])
    print('\n')

猜你喜欢

转载自blog.csdn.net/amusi1994/article/details/80545854