C语言经典案例:有n个人围成一圈,顺序排号。从第一个人开始报数
需求描写:有n小我围成一圈,次序排号。从第一小我开端报数(从1到3报数),凡报到3的人加入圈子,问最初留下的是本来第几号的那位。
C语言案例剖析:无。
实现代码如下:
#include <stdio.h>
void main()
{
int num[50],n,*p,j,loop,i,m,k;
printf("请输出这一圈人的数目:\n");
scanf("%d",&n);
p=num;
//开端给这些人编号
for (j=0;j<n;j++)
{
*(p+j)=j+1;
}
i=0;//i用于计数,即让指针后移
m=0;//m记载加入圈子的人数
k=0;//k报数1,2,3
while(m<n-1)//当加入的人数不大于总人数时,即留下的人数至多是一小我
//这句不能写成m<n,由于假定有8人,当加入了6人时,此时照样停止人数加入,即m++,
//这时候是7<8,剩下的一小我本身喊1,2,3那末他也就加入了,将不会有输入
{
if (*(p+i)!=0)//假如这小我的头上编号不是0就开端报数加1,这里采取的办法是报数为3的人头上编号重置为0
{
k++;
}
if (k==3)
{ k=0; //报数清零,即下一小我从1开端报数
*(p+i)=0;//将报数为3的人编号重置为0
m++; //加入人数加1
}
i++; //指针后移
if (i==n)//这句很症结,假如到了队尾,就要使指针从新指向仇人
//而且它只能放在i++前面,由于只要i++了才有能够i==n
{
i=0;
}
}
printf("如今剩下的人是:");
for (loop=0;loop<n;loop++)
{
if (num[loop]!=0)
{
printf("%2d号\n",num[loop]);
}
}
}
以上程序履行输入结果为:
请输出这一圈人的数目:
8
如今剩下的人是: 7号
本文由IT教学网整理发布,转载请注明出处:http://www.itjx.com/jiaocheng/cyuyan/998.html
