关注
#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-05 20:45
门头沟学院 C++ 点赞 评论 收藏
分享
查看25道真题和解析 点赞 评论 收藏
分享
牛客热帖
更多
- 1... 简历上写了AI项目,怎么才能拉开差距?6232
- 2... 我用一场重病,换来了与大厂的和解6166
- 3... 不会AI Coding真的不行吗?4593
- 4... 字节跳动-中国交易与广告面经3020
- 5... Claude Code 压缩机制曝光,这波真的有点猛啊!2021
- 6... 战报分享——2026年前端社招找工作感想1591
- 7... 字节跳动-Agent开发实习生 一面(45分钟):1357
- 8... 学AI+测试力竭的感觉谁懂,WDF越学感觉自己越菜!1206
- 9... 百度Agent前端一面 超级轻松面1121
- 10... 一家我看不上的初创公司,老板愿意给我开9k实习工资,甚至亲手写了2000多字的offer邮件给我891
正在热议
更多
# 我的实习日记 #
4177921次浏览 33336人参与
# 京东美团大战,你怎么看? #
192626次浏览 925人参与
# 第3届现代汽车Code Faster急速编程挑战赛 #
37327次浏览 547人参与
# 牛客AI文生图 #
27348次浏览 276人参与
# 城市生存手册 #
10496次浏览 133人参与
# 实习最晚的一次下班是几点 #
41150次浏览 180人参与
# 你的房租占工资的比例是多少? #
105618次浏览 915人参与
# 入职第一天,你准备什么时候下班 #
130228次浏览 533人参与
# 如果人间有后悔药 #
15653次浏览 314人参与
# 入职第五天,你被拉进了几个工作群 #
33943次浏览 85人参与
# 柠檬微趣笔试 #
6128次浏览 68人参与
# 双非本科的出路是什么? #
238969次浏览 1672人参与
# 网易游戏笔试 #
18877次浏览 107人参与
# 哪些公司对双非友好 #
245923次浏览 1293人参与
# 秋招感动瞬间 #
129345次浏览 572人参与
# 你觉得面试是靠实力还是靠运气 #
37972次浏览 416人参与
# 你现在的工作,是“成长”还是“消耗”? #
34276次浏览 259人参与
# 用一句话形容你的团队氛围 #
54482次浏览 316人参与
# 听到哪句话就代表面试稳了or挂了? #
280950次浏览 1802人参与
# 你以为的实习VS真实的实习 #
148774次浏览 769人参与
# 卷__卷不过你们,只能卷__了 #
71375次浏览 807人参与