蓝桥杯 基础练习 BASIC-9 特殊回文数

基础练习 特殊回文数

问题描述
  123321是一个非常特殊的数,它从左边读和从右边读是一样的。
  输入一个正整数n, 编程求所有这样的五位和六位十进制数,满足各位数字之和等于n 。
输入格式
  输入一行,包含一个正整数n。
输出格式
  按从小到大的顺序输出满足条件的整数,每个整数占一行。
样例输入
52
样例输出
899998
989989
998899
数据规模和约定
  1<=n<=54。
  
2.主要代码
(1)方法一:
因为要求的是5位或者6位,如果是5位,只需要单独判断前两位,单独判断第三位;后两位用前两位的就行了,再把各位相加判断是否等于n;如果是6位,就判断前三位,后三位用前三位的值,再 判断各位的和是否等于n

import java.util.Scanner;
public class BASIC_9 {

	/**
	 * @param args
	 */
	public static void main(String[] args) {
		
		Scanner sc=new Scanner(System.in);
		int n=sc.nextInt();
		
		if(n<1||n>54) return;
		//int sum=0;
		//五位数字 求前面两位  中间遍历0-9
		for(int i=10;i<=99;i++){
			//求1  2 位
			for(int k=0;k<=9;k++){
				int n1=i/10;
				int n2=i%10;
				if(2*(n1+n2)+k==n){
					int n4=n2*10;
					int n5=n1;
					int m=i*1000+k*100+n4+n5;
					System.out.println(m);
				}
			}
		}
		//接着求六位的
		for(int i=100;i<=999;i++){
			int n1=i/100;
			int n2=(i/10)%10;
			int n3=i%10;
			
			if(2*(n1+n2+n3)==n){
				
				int m=i*1000+n3*100+n2*10+n1;
				
				System.out.println(m);
				
			}
			
		}
		

	}

}

(2)方法二:直接for循环(不超时)

import java.util.Scanner;

public class BASIC_9_1 {

	/**
	 * @param args
	 */
	public static void main(String[] args) {
		Scanner sc=new Scanner(System.in);
		int n=sc.nextInt();
		
		if(n<1||n>54) return;
		
		for(int i=10000;i<=99999;i++){
				
				int n1=i/10000;
				int n2=i/1000%10;
				int n3=i/100%10;
				int n4=i/10%10;
				int n5=i%10;
	
				if(n1+n2+n3+n4+n5==n && n1==n5 && n2==n4){
					System.out.println(i);
				}

			}
			
		
		for(int i=100000;i<=999999;i++){
			
			int n1=i/100000;
			int n2=i/10000%10;
			int n3=i/1000%10;
			int n4=i/100%10;
			int n5=i/10%10;
			int n6=i%10;
			
			if(n1+n2+n3+n4+n5+n6==n && n1==n6 && n2==n5 && n3==n4){
				System.out.println(i);
			}
	
		}
		
	}
	}

发布了12 篇原创文章 · 获赞 0 · 访问量 1306

猜你喜欢

转载自blog.csdn.net/LilyS1/article/details/104025302