Parliament
Problem Description
You are to write a program that will determine how many delegates should contain each group in order for Parliament to work as long as possible.
Input
Output
Sample Input
7
Sample Output
3 4
Hint
Source
类似于找子序列,就是将n进行拆分N=a1+a2+a3+a4+...+an.
#include<bits/stdc++.h>
using namespace std;
int main()
{
int n;
int count;
while(scanf("%d",&n)!=EOF)
{
int i,num=0;
int sum=0;
int a[1001];
memset(a,0,sizeof(a));
//1不能被拆分,所以从2开始累加,一直到n
for(i=2;sum+i<=n;i++)
{
sum=sum+i;
a[++num]=i;
}
if(sum==n)
{
for(int j=2;j<i-1;j++)
cout<<j<<" ";
cout<<i-1<<endl;
}
//否则从最大项开始,逐渐累加,一直到n为止
else
{
count=num;
while(n-sum>0)
{
a[num]++;
num--;
sum++;
if(num<=0)
num=count;
}
}
for(int j=1;j<count;j++)
{
cout<<a[j]<<" ";
}
cout<<a[count]<<endl;
}
return 0;
}
#include<bits/stdc++.h>
using namespace std;
int main()
{
int n,i=4,m=5,j;
cin>>n;
while (m<n)
m=m+i++;
j=m-n;
m=2;
if (j==1)
{
m=3;
j=i-1;
i++;
}
while (m<i-1)
{
if (m!=j)
cout<<m<<" ";
m++;
}
cout<<i-1<<endl;
return 0;
}