/*
经济学上有个“海盗分金”模型,是说5个海盗抢得100枚金币,他们按抽签的顺序依次提方案:
首先由1号提出分配方案,然后5人表决,超过半数同意方案才被通过,否则他将被扔入大海喂鲨鱼,依此类推。
*/
#include <iostream>
#define MAX_VALUE 2000000000
using namespace std;
int* solve(int n,int c);
void print(int *tmp,int n,int t)
{
for(t=t-n;t>0;t--)
cout<<'\t';
for(int i=0;i<n;i++)
{
cout<<tmp[i]<<'\t';
}
cout<<'\n';
}
int *plusResult(int n,int c)
{
int *tmp=solve(n,c);
int *result=new int[n+1]();
int i,k,min,count=0;
for(k=0;k<(n+1)/2;k++)
{
for(i=0,min=0;i<n;i++)
{
if(tmp[i]<tmp[min])
min=i;
}
count+=result[min+1]=tmp[min]+1;
tmp[min]=MAX_VALUE;
}
result[0]=c-count;
delete[] tmp;
return result;
}
int* solve(int n,int c)
{
int *tmp=new int[n]();
if(n>3)
{
return plusResult(n-1,c);
}
else if(n<3)
{
return tmp;
}
tmp[0]=c;
tmp[1]=0;
tmp[2]=0;
return tmp;
}
int main()
{
int* result,n,c;
cout<<"请输入海盗数量和珠宝数量:";
cin>>n>>c;
cout<<"海盗编号:\t";
int i;
for(i=1;i<=n;i++)
cout<<i<<"\11";
cout<<endl;
for(i=3;i<=n;i++)
{
result=solve(i,c);
cout<<"当只剩"<<i<<"个海盗时:";
print(result,i,n);
delete result;
}
return 0;
}