满意答案
ypv8
2013.05.24
采纳率:40% 等级:12
已帮助:21199人
#include "stdio.h"
#define N 100 //最大人数
void Init(int (*p)[2],int n)
{
int i;
for(i=0;i
{
p[i][0]=i+1;//从1开始编号,第i个人编号为i
p[i][1]=1;//开始时每个人都在圈中,故状态信息为1
}
}
void reportnumber(int (*p)[2],int n)
{
int i;
int c=0;//将c置为0,以便开始报数
int count =n;//报数前的人数
while(1)//从编号为1的人开始报数
{
for(i=0;i
{
if(p[i][1]==1)//圈中人报数
{
c++;
}
if(c==3)//报3的人就退出这个圈,状态信息变为0
{
p[i][1]=0;
count--;//圈中人数减1
c=0;//将c置为0,以便重新报数
}
if(count==1)//当圈中只剩一人时停止报数
break;
}
if(count==1)break;
}
}
void output(int (*p)[2],int n)
{
int i;
for(i=0;i
{
if(p[i][1]==1)
{
printf("最后剩下的人是最初的第%d号\n",p[i][0]);
}
}
}
void main()
{
/*定义一个二维数组,每一行的第一个位置存放编号,第二个位置存放状态
若该人还在圈中,状态为1,否则为0*/
int a[N][2];
int n=16;
Init(a,n);
reportnumber(a,n);
output(a,n);
}已经测试过了~~
10分享举报