#include<iostream>
using namespace std;
#define TRUE 1
#define ERROR 0
class Array
{
private:
int *array;
int length;
public:
void Initlist(int n);
void Destorylist();
void output();
int Listlength();
int Insert(int s,int n);
int Listdelete(int s,int &n,int s1);
};
void Array::Initlist(int n)
{
int i;
length=n;
array=new int [n];
for(i=0;i<n;i++)
array[i]=i+1;
}
void Array::Destorylist()
{
delete [] array;
}
void Array::output()
{
int i;
cout<<"剩余孩子的个数为:"<<length<<endl<<"编号为:";
for(i=0;i<length;i++)
cout<<array[i]<<" ";
}
int Array::Listlength()
{
return length;
}
int Array::Insert(int s,int n)//当链表中没有数据,则不执行循环
{
int i;
for(i=length;i>=s;i--)
array[i]=array[i-1];
array[s-1]=n;
length++;
return TRUE;
}
int Array::Listdelete(int s,int &n,int s1)
{
if(length==0&&s==0) return ERROR;
int i,j;
n=array[s-1];
j=s-1;
for(i=j;i<length;i++)
array[i]=array[i+1];
length--;
j=(j+s1-1)%length+1;
return j;
}
int main()
{
int Game1(Array a,int m,int k);
int Game2(Array a,int m,int k);
int m,n,k,k1;
cout<<"请输入小孩的个数为:";
cin>>n;
cout<<"请输入你要淘汰几号编号孩子的间隔数:";
cin>>m;
cout<<"请输入你想要获胜者的数量:";
cin>>k;
Array child;
child.Initlist(n);
child.output();
cout<<endl;
cout<<"是否中途要增加小孩的数量,不是请输入1,是请输入2:";
cin>>k1;
if(k1==1)Game1(child,m,k);
else
if(k1==2)Game2(child,m,k);
else
cout<<"输入有问题!"<<endl;
return 0;
}
int Game1(Array a,int m,int k) //对象的传递是双向的
{
int t,m1;
m1=m;
while(a.Listlength()>k) //在这改变获胜者的数量
{
m=a.Listdelete(m,t,m1);
cout<<"淘汰孩子的编号为:"<<t<<endl;
a.output();
}
cout<<"获胜的孩子的编号为:";
a.output();
cout<<endl;
return 0;
}
int Game2(Array a,int m,int k)
{
int t,s=0,i,m1;
int k1;
int n=a.Listlength();
m1=m;
while(a.Listlength()>k) //在这改变获胜者的数量
{
m=a.Listdelete(m,t,m1);
cout<<"淘汰孩子的编号为:"<<t<<endl;
a.output();
cout<<endl;
cout<<"是否要插入小孩,是请输入1,否请输入0:";
cin>>k1;
if(k1==1)
{
int s1,s2;
cout<<"请输入你要插入小孩的个数:";
cin>>s1;
for(i=0;i<s1;i++)
{
cout<<"请输入你要插入小孩的第"<<i+1<<"个小孩的插入位置:";
cin>>s2;
a.Insert(s2,++n);
cout<<"插入后的小孩排队的序列为:";
a.output();
cout<<endl;
}
}
else
if(k1==0)continue;
else
{
cout<<"输入错误,跳出程序!"<<endl;
break;
}
}
a.output();
cout<<endl;
return 0;
}
小孩转圈淘汰游戏(数组实现)Jose类,Ring类
最新推荐文章于 2020-07-05 15:48:24 发布