创新工场软工题2-2

原创 2016年08月29日 10:00:09

题目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;
}
版权声明:本文为博主原创文章,未经博主允许不得转载。

相关文章推荐

创新工场O2O项目布丁六款生活类应用简评

在成立近一年后,创新工场旗下成员布丁昨日宣布获近千万美元A轮融资,由清科创投领投。这也是创新工场孵化的首个O2O项目。创始人徐磊称,布丁希望做中国最大的移动互联网e-coupon平台。布丁创立后,已先...

雅虎搜狐创新工场微软_五道算法题

雅虎: 1.对于一个整数矩阵,存在一种运算,对矩阵中任意元素加一时,需要其相邻(上下左右)某一个元素也加一,现给出一正数矩阵,判断其是否能够由一个全零矩阵经过上述运算得到。   2.一个整数数组...
  • zqt520
  • zqt520
  • 2012-10-01 23:40
  • 1214

关于创新工场的一道笔试题

32位机(little endian) 下例的输出结果是什么? #include union A { int i; char c[2]; }; int main() { ...

创新工场2013校园招聘题

  • 2012-09-24 10:53
  • 881KB
  • 下载

九月腾讯,创新工场,淘宝等公司最新面试十三题(更新至10.04)

转自  http://blog.csdn.net/v_JULY_v/article/details/6803368#comments 还是看原文,看评论。   九月腾讯,创新工场,淘宝等公司...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:深度学习:神经网络中的前向传播和反向传播算法推导
举报原因:
原因补充:

(最多只允许输入30个字)