关注
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
相关推荐
帮你内推|腾讯云智研发 校招 点赞 评论 收藏
分享
无能的后端仔:希望校招生注意,hr面不要被hr套路透露真实家庭情况
查看5道真题和解析 点赞 评论 收藏
分享
牛客热帖
更多
正在热议
更多
# 你小心翼翼的闯过多大的祸? #
2181次浏览 47人参与
# 找不到实习会影响秋招吗 #
1399002次浏览 13628人参与
# 实习没事做是福还是祸? #
2337次浏览 41人参与
# 考研人,我有话说 #
156418次浏览 1211人参与
# 2025年终总结 #
130224次浏览 2194人参与
# 实习简历求拷打 #
21863次浏览 234人参与
# 哪些公司笔/面试难度大? #
6987次浏览 32人参与
# 携程工作体验 #
18807次浏览 66人参与
# 那些我实习了才知道的事 #
252877次浏览 1784人参与
# 你觉得现在还能进互联网吗? #
29867次浏览 200人参与
# 第一份工作能做外包吗? #
93895次浏览 599人参与
# 投格力的你,拿到offer了吗? #
154474次浏览 829人参与
# 秋招遇到的奇葩面试题 #
101192次浏览 416人参与
# 作业帮求职进展汇总 #
85065次浏览 559人参与
# 简历当中有水分算不算造假? #
154217次浏览 2250人参与
# 秋招被挂春招仍然能投的公司 #
8817次浏览 110人参与
# 扒一扒那些奇葩实习经历 #
140023次浏览 1148人参与
# 正在实习的你,有转正机会吗? #
465656次浏览 3062人参与
# 信也科技工作体验 #
13502次浏览 39人参与
# mt对你说过最有启发的一句话 #
41697次浏览 469人参与
