public class Main {     public static void main(String[] args) {         Scanner sc = new Scanner(System.in);         int n = sc.nextInt();         // 若n自身就是一个完全平方数         int tempNum = (int)(Math.sqrt(n));         if (tempNum * tempNum == n) {             System.out.println(n);             return ;         }         // 键盘输入的n不是完全平方数         // 布尔变量flag标识n可否由若干个(不重复的)完全平方数相加得到         boolean flag = false;         Set<Integer> set = new HashSet<>();         while (n >= 1) {             // 对n开方             int temp = (int)(Math.sqrt(n));             if (temp * temp == n) {                 // 构成n的若干完全平方数,是不允许重复的。否则也就不可能输出NA了.                 // 比如n,如果允许完全平方数重复,它肯定可以由n个1相加得到,不可能输出NA                 if (set.contains(n)) {                     break;                 }                          flag = true;             }             set.add(temp * temp);             n -= temp * temp;         }         if (flag) {             List<Integer> list = new ArrayList<>(set);             // 排序             Collections.sort(list);             for (int i = 0; i < list.size(); i++) {                 if (i != list.size() - 1) {                     System.out.print(list.get(i) + " ");                 } else {                     System.out.println(list.get(i));                 }             }         }         if (!flag) {             System.out.println("NA");         }     } } 楼主可以参考下我的代码,写得不一定优雅、简洁,但我自己测试的时候,能通过绝大多数样例。 存在问题:样例输入41,我的输出是1 4 36,正确输出应该是16 25 。 我正在review代码,寻求将这个问题解决,如果有老哥看出问题所在,请指点一下,谢谢。
点赞 3

相关推荐

牛客网
牛客企业服务