(1)用字母初始化:
#include <stdio.h>
void print(char *a,int n);//打印显示
void display(char *a,int n);//报3退圈
int main()
{
int n,i;
printf("请输入参与游戏的人数:");
scanf("%d",&n);
char a[n];//赋值A、B、C...
for(i=0;i<n;i++)
{
a[i]='A'+i;
}
char *p=a;
printf("参加游戏的选手:\n");
print(p,n);
printf("\n");
display(p,n);
printf("最后留下的人是:");
print(p,n);
return 0;
}
void display(char *a,int n)
{
int i=1; //编号
int count=n; //当count=1时得结果
int flag=0; //循环报数
while(count>1)
{
if(flag==n)
{
flag=0;
}
if(a[flag]!='*')
{
if(i==3)
{
a[flag]='*';
i=0;
count--;
}
i++;
}
flag++;
}
}
void print(char *a,int n)
{
int i;
for(i=0;i<n;i++)
{
if(a[i]!='*')
{
printf("a[%d]=%c ",i,a[i]);
printf("\n");
}
}
}
注:用‘*‘代表已经退圈的人
第一轮:ABC C报3,C退圈,C=0
第二轮:DAB B报3,B退圈,B=0
第三轮:DAD D报3,D退圈,D=0
(2)用数字初始化
#include <stdio.h>
void print(int *a,int n);//打印显示
void display(int *a,int n);//报3退圈
int main()
{
int n,i;
printf("请输入参与游戏的人数:");
scanf("%d",&n);
int a[n];//赋值A、B、C...
for(i=0;i<n;i++)
{
a[i]=1;
}
int *p=a;
display(p,n);
printf("最后留下的人序号是:");
print(p,n);
return 0;
}
void display(int *a,int n)
{
int i=1; //编号
int count=n; //当count=1时得结果
int flag=0; //循环报数
while(count>1)
{
if(flag==n)
{
flag=0;
}
if(a[flag])
{
if(i==3)
{
a[flag]=0;
i=0;
count--;
}
i++;
}
flag++;
}
}
void print(int *a,int n)
{
int i;
for(i=0;i<n;i++)
{
if(a[i])
{
printf("%d\n",i);
}
}
}