题目
数字十进制表示中(0~9),每个数位各不相同且各个数位之和等于N。满足条件的数字可能很多,找到其中的最小值即可。
-
输入描述
共一行,一个正整数N,如题意所示,表示组合中数字不同数位之和。
(1 <= N <= 1,000) -
输出描述
共一行,一个整数,表示该组合中的最小值。
如果组合中没有任何符合条件的数字,那么输出-1即可。 -
例子
输入例子:
5
输出例子:
5
例子说明:
符合条件的数字有:5,14,23,32,41
其中最小值为5
分析
由于要求数字各位均不相同,那么数字做多为1234567890 这10位,数字之和为45, 所以0<=N<=45;
要想数字最小,那么低位越大越好,就从9开始循环递减就行
代码实现
import java.util.Scanner;
// 注意类名必须为 Main, 不要有任何 package xxx 信息
public class Main {
public static void main(String[] args) {
Scanner in = new Scanner(System.in);
// 注意 hasNext 和 hasNextLine 的区别
while (in.hasNextInt()) { // 注意 while 处理多个 case
int a = in.nextInt();
// int b = in.nextInt();
solve(a);
}
}
private static void solve(int N) {
if(N>45) {
System.out.println("-1");
return;
}
StringBuilder stringBuilder = new StringBuilder();
for (int i = 9; i > 0; i--) {
if (N >= i) {
N -= i;
stringBuilder.insert(0, i);
}
}
System.out.println(stringBuilder.toString());
}
}
标签:Scanner,int,stringBuilder,笔试,System,最小值,多多,pdd,数字
From: https://www.cnblogs.com/happy-to-study/p/17019757.html