int main()
{
int N;
printf("总人数?");
scanf("%d",&N);
int a[N];
int i,j=0;
int *ptr=a;
for(i=0;i<N;i++)
{
a[i]=i+1;
//printf("%d ",a[i]);
}
int next=N;//保存剩余人数
while(next>1)
{
for(i=0;i<N;i++)
{
if(a[i]==0)
{
continue;
}
else
{
j++;
if(j%3==0)//将数到三的同学代表的数组值设为1
{
a[i]=0;
next--;//同时剩余人数减一
}
/*else//将剩下的人打印出来
{
printf("%d ",a[i]);
}*/
}
}
}
//printf("\n");
for(i=0;i<N;i++)
{
if(a[i]!=0)
{
printf("剩余的童鞋是:%d\n",a[i]);
}
}
return 0;
}
在Ubuntu下执行结果:
写时遇到的问题:
1.信号量的设置:j值一直增加,模三等于0,表示数三者。同时每轮循环,从数组第一个元素起,0值表示该人已退出,next信号量减一,停驶应格外注意,每一轮循环开始,要将信号量值恢复,否则出错。
2.今天才学会continue的使用;