关注
#include<set>
#include<iostream>
#include<vector>
using namespace std;
int numSquares(int n)
{//找出n所组成的最小的完全平方个数
while(n%4==0) n/=4;
if(n%8 == 7) return 4;
for(int a = sqrt(n); a > 0; --a)
{
int b = sqrt(n-a*a);
if(a*a+b*b == n) return !b? 1 : 2;
}
return 3;
}
set<int> get_data(int n){//获取每个完全平方数
set<int> data;
for(int i = 0; i<n; ++i){
data.insert(i*i);
}
return data;
}
vector<int> get_out(set<int> data, int n, int m){//遍历,找出符合要求的完全平方数
set<int> ::iterator it = data.begin();
it = data.lower_bound(n);
vector<int> out_o;
int p = m;
while(p--){
--it;
out_o.clear();
set<int> ::iterator it1 = it;
int a,s = 0,s1=0;
while(it1!=data.begin()){
a = *it1;
s += a;
if(s<n){
out_o.push_back(a);
--it1;
}
else if (s>n)
{
s -= a;
--it1;
}
else{
out_o.push_back(a);
break;
}
if(out_o.size()>m)
break;
}
int len = out_o.size();
for(int i = 0; i<len; ++i)
s1 += out_o[i];
if(s1==n && len==m) break;
}
return out_o;
}
int main()
{
int n;
while(cin>>n){
set<int> data;
data = get_data(n);//集合中存放每个与下标对应的完全平方数
int m = numSquares(n);//获取其和为n的最小的完全平方数的个数
int s = 0;
vector<int> out_o = get_out(data, n, m);//得到所求的完全平方数
for(int i = out_o.size()-1; i>=0; --i){
s += out_o[i];
}
if(s==n){
for(int i = out_o.size()-1; i>=0; --i)
cout<<out_o[i]<<" ";
}
else
cout<<"NA";
cout<<endl;
}
return 0;
} 我用了另外一种思路,这种方法既能保证从小到大又能是输出的个数最小,但是方法不是很简便,欢迎有更好思路的小伙伴可以留言评论。
查看原帖
点赞 评论
相关推荐
点赞 评论 收藏
分享
06-12 11:47
北京农业大学 增长产品 点赞 评论 收藏
分享
点赞 评论 收藏
分享
牛客热帖
更多
正在热议
更多
# 考研对你找工作产生了哪些影响? #
12777次浏览 131人参与
# 你的房租占工资的比例是多少? #
28136次浏览 281人参与
# 聊聊这家公司值得去吗 #
251676次浏览 2317人参与
# 找实习你看重大厂光环还是业务方向 #
6669次浏览 59人参与
# 职场捅娄子大赛 #
365950次浏览 3751人参与
# 你最满意的offer薪资是哪家公司? #
26570次浏览 141人参与
# kpi面有什么特征 #
39573次浏览 322人参与
# 打杂的实习你会去吗? #
111102次浏览 966人参与
# 你有哪些缓解焦虑的方法? #
7316次浏览 240人参与
# 为了找工作你投递了多少公司? #
16669次浏览 245人参与
# 机械只有读研才有出路吗? #
20197次浏览 230人参与
# 大家实习每天都在干啥 #
81080次浏览 500人参与
# 职场人,说说你的烦心事 #
9398次浏览 85人参与
# 工作中哪个瞬间让你想离职 #
24341次浏览 167人参与
# 秋招前后对offer的期望对比 #
290379次浏览 2175人参与
# 机械人晒出你的简历 #
76127次浏览 636人参与
# 小米求职进展汇总 #
826204次浏览 5923人参与
# 职场上哪些事情令人讨厌 #
17090次浏览 87人参与
# 实习想申请秋招offer,能不能argue薪资 #
139772次浏览 889人参与
# 校招第一份工作你干了多久? #
75509次浏览 367人参与