zoukankan      html  css  js  c++  java
  • cdoj1099

    搜索加记录   

    平方数

    众所周知,一个正整数可以分成若干个正整数的和(废话),现在我们把问题改一下。把一个正整数分成若干个平方数的和,显然这也是一定可以达到的。例如8=4+4=2^2+2^2 41=4^2+5^2 3=1+1+1。但是现在试卷空格有限,不可能让你写n个1上去,所以我们需要最少的分拆。

    #include <iostream>
    #include <math.h>
    using namespace std;
    int base[320];
    int ans[300];
    int res[300];
    int rlen;
    int len;
    int back(int n,int temp)
    {
    //cout<<"lsjdls"<<endl;
    int i,j;
    //int temp=(int)sqrt((double)n);
    for(i=n/(temp*temp);i>=0;i--)
    {
    //cout<<temp<<endl;
    //cin>>temp;
    if(n==i*temp*temp)
    {
    //cout<<"first"<<endl;
    len+=i;
    int k;
    if(len<=rlen)
    {
    rlen=len;
    for(j=0;j<i;j++)
    {
    res[j]=temp;
    }
    for(k=len-1-i;k>=0;k--)
    res[j++]=ans[k];
    }
    len-=i;
    return 0;
    }
    else
    { //cout<<"second"<<endl;
    for(j=1;j<=i;j++)
    ans[len++]=temp;
    back(n-i*temp*temp,temp-1);
    len-=i;
    }
    }
    return 0;
    }
    int main()
    {
    int i;
    for(i=1;i<=320;i++)
    {
    base[i]=i*i;
    }
    int n;
    while(cin>>n)
    {
    rlen=10000;
    len=0;
    int temp=(int)sqrt((double)n);
    back(n,temp);
    cout<<rlen<<endl;
    for(i=0;i<rlen;i++)
    {
    cout<<res[i];
    if(i<rlen-1)cout<<" ";
    }
    cout<<endl;
    }
    return 0;
    }
  • 相关阅读:
    linux之uniq
    shell之sort
    tr命令的使用
    AWK 简明教程
    Word Frequency
    10亿个数中选出最大的100个数
    代理模式(也称委托模式)
    java内存相关
    Two Sum
    Java的集合
  • 原文地址:https://www.cnblogs.com/orangeblog/p/2426338.html
Copyright © 2011-2022 走看看