帮忙分析下这个C语言程序

来源:百度知道 编辑:UC知道 时间:2024/05/14 07:24:55
题目:
有n个人围成一圈,顺序排号。从第一个人开始报数(从1到3报数),凡报到3的人退出圈子,请输出报数出列圈及最后留下的数据和在原来位置的第几号。

帮忙分析下 每句程序的意思

#include<stdio.h>
main()
{
int i,j,k,n;
int member[1000];
printf("请输入人数:\n");
scanf("%d",&n);

for(i=0;i<n;i++)
{
member[i]=i+1;
}

i=0;j=0;k=n;

while(1)
{

if(member[i]!=0)
{ j++;
if(j%3==0)
{
member[i]=0;
k--;
}
}
if(k==1)
break;
i++;
if(i==n)
i=0;
}

for(i=0;i<n;i++)
{
if(member[i]!=0)
printf("最后的一个家伙是:%d",member[i]);
}

}

main()
{
//定义变量:
int i,j,k,n;
int member[1000];
//输入人数最大1000
printf("请输入人数:\n");
scanf("%d",&n);

//将数组初始化,依次代表每个人的编号
for(i=0;i<n;i++){
member[i]=i+1;
}
i=0;j=0;k=n;
//开始循环
while(1){
if(member[i]!=0){
j++;
//一旦成员数除3后余数为0,就把这个人清0(就是退出圈子了)
if(j%3==0){
member[i]=0;
//踢掉一个人,总人数减1(k就是n来的)
k--;
}
}
if(k==1) //最后一个人了,所以退出循环
break;
i++; //i是用来循环的,报数一圈以后(i=n),又从新循环(第2圈报数开始)
if(i==n) i=0;
}
//在数组里面选出不为0的那个数,就是最后一个人
for(i=0;i<n;i++) {
if(member[i]!=0)
printf("最后的一个家伙是:%d",member[i]);
}
}

你就是i j k这几个变量是什么意思不懂呗。偶来告诉你哦。

i:控制数组中取第几个元素。每一次数组扫描,都是从menber[0]到members[n-1].

j:控制数组中取第几个非零元素.第一次扫描数组ij是一样的,因为没有非零元素,以后就不一样了,遇到非零元j就