【蓝桥杯】基础练习 特殊回文数(Java实现)

该博客主要探讨了如何解决蓝桥杯基础练习中的特殊回文数问题。作者提供了两种Java实现方法:一是枚举所有可能的五位和六位数,检查它们是否为回文且数字和符合要求;二是通过双重循环遍历数字,根据位值计算和。对于五位数,个位与万位、十位与千位、百位相同,对于六位数,个位与十万位、十位与万位、百位与千位相同。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

在这里插入图片描述
分析:
本题的思路与上篇 基础练习 回文数的思路差不多,只不过是情况复杂了一些,对各位数字的和有了限制并且有五位数六位数这样的不同位数的情况。

方法一,枚举所有的五位六位整数,将它们的个十百千万(十万)位分别分离出来,然后判断是否是否是回文数并且各位数字的和满足输入的数。注意区分五位数、六位数两种情况。

方法二,用两重循环分别遍历五位数或六位数各位上的数字,若各位数字的和满足输入的数,则将其乘以该位上的权值求和即可。
当为5位数时,个位与万位(i)、十位与千位(j)、百位(k)的数字是相同的。
当为6位数时,个位与十万位(i)、十位与万位(j)、百位与千位(k)的数字是相同的。

Java代码实现:

方法一:

import java.util.Scanner;    
public class Main {    
	public static void main(String[] args) {
		Scanner scanner = new Scanner(System.in);
		int n = scanner.nextInt();
		for(int i = 10000; i <= 999999; i++) {
			if (i < 100000) {
				int g = i / 1 % 10;			//个位数字
				int s = i / 10 % 10;		//十位数字
				int b = i / 100 % 10;		//百位数字
				int q = i / 1000 % 10;		//千位数字
				int w = i / 10000 % 10;		//万位数字
				if (g == w && s == q && g+s+b+q+w == n) {
					System.out.println(i);
				}
			}else {
				int g = i / 1 % 10;			//个位数字
				int s = i / 10 % 10;		//十位数字
				int b = i / 100 % 10;		//百位数字
				int q = i / 1000 % 10;		//千位数字
				int w = i / 10000 % 10;		//万位数字
				int sw = i / 100000 % 10;		//十万位数字
				if (g == sw && s == w && b == q && g+s+b+q+w+sw == n) {
					System.out.println(i);
				}
			}			
		}
	}
}

方法二:

import java.util.Scanner;

public class Main {
	public static void main(String[] args) {
		Scanner scanner = new Scanner(System.in);
		int n = scanner.nextInt();
		int sum = 0;
		
		//5位数
		for (int i = 1; i < 10; i++) {
			for(int j = 0; j < 10; j++) {
				for(int k = 0; k < 10; k++) {
					if (2 * (i + j) + k == n) {
						sum = i * 10001 + j * 1010 + k * 100;
						System.out.println(sum);
					}
				}
			}
		}
		
		//6位数
		for (int i = 1; i < 10; i++) {
			for(int j = 0; j < 10; j++) {
				for(int k = 0; k < 10; k++) {
					if (2 * (i + j + k) == n) {
						sum = i * 100001 + j * 10010 + k * 1100;
						System.out.println(sum);
					}
				}
			}
		}
	}
}
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值