创新工场软工题2-2
来源:互联网 发布:手机时钟主题软件 编辑:程序博客网 时间:2024/05/14 22:02
题目2:
给一个正整数 n, 找到若干个完全平方数(比如1, 4, 9, … )使得他们的和等于 n。你需要让平方数的个数最少。
给出 n = 12, 返回 3 因为 12 = 4 + 4 + 4。
给出 n = 13, 返回 2 因为 13 = 4 + 9。
第二题:完整代码:C++
// 2016/9/6更新#include<iostream>#include<vector>using namespace std;int NumOfSquare(int num){ if(num<1) return 0; if(num==1) return 1; //找出完全平方数,记录在数组容器中 vector<int> arr; int temp=1; for(int i=2; temp<num; i++) { arr.push_back(temp); temp=i*i; } const int n=arr.size(); int MinNum=num; //初值为最大次数 //设置两个容器,记录最相加的平方数 vector<int> Current; //当前最少数字平方数 vector<int> Candidate; //候选最少数字平方数 for(int i=n-1; i>=0; i--) { int leftNum=num; //贪心算法 int CandidateMin=0; //候选最小次数 for(int j=i; j>=0; j--) { if(leftNum==arr[j]) { Candidate.push_back(arr[j]); CandidateMin++; break; } while(leftNum>arr[j]) { Candidate.push_back(arr[j]); leftNum-=arr[j]; CandidateMin++; } } //更新最小平方和的数目 //MinNum=(MinNum<CandidateMin?MinNum:CandidateMin); if(MinNum>CandidateMin) { MinNum=CandidateMin; Current.clear(); Current.assign(Candidate.begin(),Candidate.end()); Candidate.clear(); } } //输出 for(int i=0; i<Current.size(); i++) cout<<Current[i]<<" "; cout<<endl; return MinNum;}int main(){ cout<<NumOfSquare(13)<<endl; cout<<endl; cout<<NumOfSquare(100)<<endl;}
3 0
- 创新工场软工题2-2
- 创新工场软工题2-1
- 创新工场
- 创新工场
- 创新工场
- 螺旋队列(螺旋矩阵)——创新工场面试总结2
- 算法2:树的带权路径长度(创新工场)
- 创新工场-创始人简介
- 创新工场-创办理念
- 李开复-创新工场-发言稿
- 创新工场笔试
- 创新工场 电话面试
- 创新工场笔试
- 创新工场笔试题
- 9.24创新工场
- 9.25创新工场一面
- 创新工场一面
- 创新工场面试题
- 不同的点
- leetcode之Counting Bits
- 双缓冲和单缓存的区别
- 51NOD 1537 分解(矩阵快速幂)——算法马拉松17(告别奥运)
- 金蝶KIS标准版报表提示循环引用
- 创新工场软工题2-2
- 三台PC服务器部署Hadoop HA(Hadoop 高可用性架构)
- 饿了么:业务井喷时,订单系统架构这样演进
- Android开发-Json(二)Json数据的解析-完整Demo-AndroidStuidio
- 求概率发生的事件
- hdu4607
- LeetCode—389. Find the Difference
- 排序算法--选择排序
- Hive与Hadoop的调用关系