问题;假设有30个人 报到三的人出局 按顺序输出出局的人
怎么让一个循环 让每一次 出局的人 在循环中被略过去 我设了 now:当前的人的编号 pre 当前的人的前一个活着的人的编号 a【i】:是当前人的下一个活着的人的编号
建立一个30大小的数组,数组值就是0或1。1表示已经出局的。那么循环过程中,如果数组值为1,就忽略
报到三的人,将数组值设置为1。如果某次扫描完30个数组元素,发现没能淘汰人,那么循环就结束了
代码如下:
#include<stdio.h>
#define MAXN 30
void CountOff(int n,int m,int out[]);
int main()
{
int i,n,m,out[MAXN];
scanf("%d %d",&n,&m); //n是总人数,m是报的数
CountOff(n,m,out);
for(i = 0;i<n;i++)
{
if(out[i] == 0)
printf("%d",i+1); // 编号从1开始
}
return 0;
}
void CountOff(int n,int m,int a[])
{
int i,t=n,k=0;//t表示剩余人数
for(i=0;i<n;i++)
a[i] = 0;
while(t!=1)
{
for (i=0;i<n;i++)
{
if(a[i]==0)
{
k++;
if(k%m==0)
{
k = 0;
a[i]=1;
t--;
}
}
}
//显示过程
/*for(int k=0;k<n;k++)
printf("%d ",a[k]);
printf("\n");*/
}
}