#include<iostream>
using namespace std;
const int maxsize=150;
typedef struct{
int data[maxsize];
int n;
}sqlist;
int Delete(sqlist *L,int i){
cout<<L->data[i-1]; //输出淘汰孩子
while(i<L->n){
L->data[i-1]=L->data[i]; //将淘汰孩子位置删除
i++;
}
L->n--;
return 0;
}
int main()
{
sqlist L;
int n1,k,a,i; //a为从领导顺时针数的数,i为第i个孩子为领导
cin>>n1>>k;
for(i=0;i<n1;i++){
L.data[i]=i+1; //为顺序表的n个孩子赋值
}
L.n=n1;i=1;
while(k>0){
cin>>a;
a%=L.n; //a取余n个孩子,求出剩几个没数
if(a>(L.n-i)) //a大于领导后面的孩子,说明是前面的被淘汰了
i=a-(L.n-i);
else //a小于等于领导后面的孩子,则后面的被淘汰
i=i+a;
Delete(&L,i); //调用函数删除该淘汰孩子的位置
if(k!=1)
cout<<' ';
k--;
}
cout<<endl;
return 0;
}
解题思路:设置一个顺序表存储每个孩子信息,用k>0作为循环条件,对需要数的人数与当前总人数取余求出剩余几个孩子,如果大于领导后面的孩子则是前面的孩子或领导淘汰,否则是领导或领导后面孩子淘汰,调用一个删除函数将该淘汰孩子位置输出并删除。直到k=0结束循环。