关注
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
相关推荐
牛客热帖
更多
正在热议
更多
# 在大厂上班是一种什么样的体验 #
7023次浏览 104人参与
# 机械人避雷的岗位/公司 #
42004次浏览 280人参与
# 程序员找工作至少要刷多少题? #
12997次浏览 201人参与
# 12306一秒售罄,你抢到回家的票了吗? #
1162次浏览 39人参与
# 我现在比当时_,你想录用我吗 #
5796次浏览 89人参与
# 过年最难忘的一件事 #
23059次浏览 174人参与
# 你最满意的offer薪资是哪家公司? #
69501次浏览 349人参与
# 为了减少AI幻觉,你注入过哪些设定? #
2653次浏览 97人参与
# 牛客AI体验站 #
4811次浏览 145人参与
# AI Coding的使用心得 #
3493次浏览 91人参与
# 找工作的破防时刻 #
253132次浏览 1960人参与
# 刚入职的你踩过哪些坑 #
5361次浏览 113人参与
# 论秋招对个人心气的改变 #
7348次浏览 130人参与
# 一张图晒一下你的AI员工 #
3605次浏览 82人参与
# 关于春招/暑期实习,你想知道哪些信息? #
5388次浏览 98人参与
# 黄金这个事上,你学到了什么 #
1285次浏览 41人参与
# 机械人你知道哪些单休企业 #
85478次浏览 428人参与
# 程序员能干到多少岁? #
6796次浏览 104人参与
# 晒晒你司的新年福利 #
5561次浏览 89人参与
# 关于提前批我想问 #
267488次浏览 2307人参与
凡岛公司福利 667人发布