关注
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
相关推荐
点赞 评论 收藏
分享
牛客热帖
更多
正在热议
更多
# 那些年,我收到的‘奇葩’回复 #
23538次浏览 160人参与
# 实习需要主动找活干吗? #
55123次浏览 295人参与
# 腾讯音乐秋招 #
431122次浏览 4779人参与
# OC/开奖 #
191203次浏览 1324人参与
# 你后悔选择现在的专业吗 #
101872次浏览 697人参与
# 职场中那些令人叹为观止的八卦 #
30579次浏览 243人参与
# 百度秋招 #
50583次浏览 384人参与
# 实习教会我的事 #
42016次浏览 342人参与
# 蚂蚁求职进展汇总 #
131590次浏览 1204人参与
# 秋招你经历过哪些无语的事 #
22394次浏览 239人参与
# 2022毕业即失业取暖地 #
120346次浏览 709人参与
# 校招薪资来揭秘 #
84010次浏览 525人参与
# 听到哪句话代表面试稳了OR挂了? #
105854次浏览 457人参与
# 秋招吐槽大会 #
92480次浏览 796人参与
# 材料人,你最希望上岸的是? #
11555次浏览 56人参与
# 你今年的保底offer是哪家 #
143795次浏览 620人参与
# 牛客十周岁生日快乐 #
184812次浏览 1825人参与
# 扒一扒那些奇葩实习经历 #
132054次浏览 1125人参与
# AI时代,哪些岗位最容易被淘汰 #
12135次浏览 99人参与
# 你找工作想离家近 or 离家远? #
16984次浏览 245人参与
# 你秋招最后悔的选择 #
18506次浏览 135人参与
# 我的职场社死时刻 #
22892次浏览 171人参与

