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

螺旋队列(螺旋矩阵)——创新工场面试总结2

创新工场会有一个统一的笔试,笔试过了之后会有面试,这个面试过了之后,可以参加后面的双选会,双选会的单位一般是从创新工场孵化成功的企业。 今天参的是第一场面试。开始聊项目,后面问了一个螺旋矩阵的问题,螺...

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

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

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

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

2015创新工场校招研发笔试题

  • 2015年09月22日 16:45
  • 65KB
  • 下载

2012创新工场校园招聘笔试题

  • 2013年01月09日 17:03
  • 19KB
  • 下载

创新工场2014笔试编程题答案

编程题 1. 堆排序 2. 求一个正整数N的开方,要求不能用库函数sqrt(),结果的精度在0.001 3. 给定一个矩阵intmaxtrixA[m][n],每行和每列都是增序的,实现一个算法去找矩...

创新工场2013校园招聘题

  • 2012年09月24日 10:53
  • 881KB
  • 下载

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

转自  http://blog.csdn.net/v_JULY_v/article/details/6803368#comments 还是看原文,看评论。   九月腾讯,创新工场,淘宝等公司...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:创新工场软工题2-2
举报原因:
原因补充:

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