poj 1032(找规律,按2,3,4,5,6...k逼近n,剩余的数分情况,大于,小于或者等于k-1,加到之前的数中去,据说可以用背包做,研究一下,未解决)
#include<iostream> #include<cstdio> using namespace std; int main(){ int i,j,k,t,n,data[50],sum = 0; scanf("%d",&n); for(i=2;;i++){ sum += i; data[i] = i; if(n<sum)break; } sum -= i; t = n-sum; i--; if(t>i-1){ for(j=2;j<=i;j++){ data[j]++; } data[i]++; } if(t==i-1){ for(j=2;j<=i;j++){ data[j]++; } } else if(t<i-1){ for(j=i,k=1;k<=t;j--,k++){ data[j]++; } } for(j=2;j<i;j++){ cout<<data[j]<<" "; } cout<<data[j]<<endl; return 0; }

浙公网安备 33010602011771号