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;
    }
  • 相关阅读:
    hdoj 1010-Tempter of the Bone
    leetcode 91. 解码方法
    leetcode 925. 长按键入
    leetcode 437. 路径总和 III
    leetcode 892. 三维形体的表面积
    二分查找
    HBASE 安装
    Linux 日常指令
    Linux Centos7 配置代理
    Linux ssh 免密
  • 原文地址:https://www.cnblogs.com/orangeblog/p/2426338.html
Copyright © 2011-2022 走看看