@yexiaoqi
2022-05-27T11:17:22.000000Z
字数 810
阅读 364
刷题
华为机试
题目:所谓的水仙花数是指一个n位的正整数其各位数字的n次方的和等于该数本身,例如153=1^3+5^3+3^3,153是一个三位数。
难度:*
输入描述:第一行输入一个整数N,表示N位的正整数N在3-7之间包含3,7,第二行输入一个正整数M,表示需要返回第M个水仙花数
输出描述:返回长度是N的第M个水仙花数,个数从0开始编号,若M大于水仙花数的个数返回最后一个水仙花数和M的乘积,若输入不合法返回-1
示例一:
输入:3
0
输出:153
说明:153是第一个水仙花数
示例二:
输入:9
1
输出:-1
public class Main {
static int[] min = {100,1000,10000,100000,1000000};
static int[] max = {999,9999,99999,999999,9999999};
public static void main(String[] args){
Scanner sc = new Scanner(System.in);
while(sc.hasNext()){
int n = sc.nextInt();
int m = sc.nextInt();
if(n<3 || n>7){
System.out.println(-1);
} else {
int count = -1;//因为m从0开始,所以count初始化为-1
for (int i=min[n-3]; i<=max[n-3]; i++) {
char[] arr = (i+"").toCharArray();
int sum = 0;
for (char c : arr) {
int cnum = Integer.parseInt(c+"");
sum += Math.pow(cnum, n);
}
if (i==sum && ++count==m) {
System.out.println(i);
break;
}
if (i == max[n - 3] && m > count)
System.out.println(i * m);
}
}
}
}
}