@yexiaoqi
2022-05-27T03:17:22.000000Z
字数 810
阅读 609
刷题 华为机试
题目:所谓的水仙花数是指一个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初始化为-1for (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);}}}}}
