蓝桥杯——特殊回文数
问题描述
123321是一个非常特殊的数,它从左边读和从右边读是一样的。
输入一个正整数n, 编程求所有这样的五位和六位十进制数,满足各位数字之和等于n 。
输入格式
输入一行,包含一个正整数n。
输出格式
按从小到大的顺序输出满足条件的整数,每个整数占一行。
样例输入
52
样例输出
899998
989989
998899
数据规模和约定
1<=n<=54。
对人友好对机器不友好的解法:暴力激活成功教程
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner input = new Scanner(System.in);
int n = input.nextInt();
for (int i = 10000; i < 999999; i++) {
StringBuilder sb = new StringBuilder();
String str = sb.append(String.valueOf(i)).toString();
String str1 = sb.reverse().toString();
if (str.equals(str1)) {
int sum = 0;
int m = i;
while (m > 0) {
sum += m % 10;
m = m / 10;
}
if (sum == n) {
System.out.println(i);
}
}
}
}
}
稍微用了脑子的做法:我们分析一下回文数n,如果是五位回文数则为XYZXY格式,则中间的Z的取值范围(0-9),XY的取值范围为(10-99),然后让n – Z = (X + Y ) * 2,最后拼接就OK,如果是六位回文数XYZZYX,则XYZ的取值的范围(100-999),找到X + Y + Z = n / 2,最后拼接就OK。注意如果是五位,记得排序。
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner input = new Scanner(System.in);
int n = input.nextInt();
List<Integer> list = new ArrayList<Integer>();
for (int i = 0; i < 10; i++) {
if ((n - i) % 2 == 1)
continue;
else {
int temp = (n - i) / 2;
for (int j = 10; j < 100; j++) {
int x = j / 10;
int y = j % 10;
if (x + y == temp) {
list.add(10000 * x + 1000 * y + 100 * i + 10 * y + x);
}
}
}
}
if (!list.isEmpty()) {
Collections.sort(list);
for (int i : list) {
System.out.println(i);
}
}
if (n % 2 == 0) {
n = n / 2;
for (int j = 100; j < 1000; j++) {
int x = j / 100;
int y = (j / 10) % 10;
int z = j % 10;
if (x + y + z == n) {
System.out.println(100000 * x + 10000 * y + 1000 * z + 100 * z + 10 * y + x);
}
}
}
}
}
后来仔细想了想的做法:自己是不是傻?n有两种可能 X + Y + Z + Y+ X = 2 * (X + Y) + Z = n或者 X +Y +Z + Z + Y + X = 2 * ( X + Y + Z) = n,XYZ的取值的范围(100-999),我只需要判断以上两种情况就可以,两者的区别就是加不加Z。注意需要排序。
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner input = new Scanner(System.in);
try {
int n = input.nextInt();
List<Integer> list = new ArrayList<Integer>();
for (int j = 100; j < 1000; j++) {
int x = j / 100;
int y = (j / 10) % 10;
int z = j % 10;
if (2 * (x + y) + z == n)
list.add(10000 * x + 1000 * y + 100 * z + 10 * y + x);
if (2 * (x + y + z) == n)
list.add(100000 * x + 10000 * y + 1000 * z + 100 * z + 10 * y + x);
}
if (!list.isEmpty()) {
Collections.sort(list);
for (int i : list)
System.out.println(i);
}
} catch (Exception e) {
input.close();
}
}
}
今天的文章蓝桥杯特殊回文数python_蓝桥杯等级考试18级有用吗「建议收藏」分享到此就结束了,感谢您的阅读。
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
如需转载请保留出处:https://bianchenghao.cn/84443.html