码迷,mamicode.com
首页 > 其他好文 > 详细

C 实战练习题目69

时间:2020-07-11 15:37:23      阅读:59      评论:0      收藏:0      [点我收藏+]

标签:第一个   数加   现在   计数   oid   style   方法   记录   不能   

题目:有n个人围成一圈,顺序排号。从第一个人开始报数(从1到3报数),凡报到3的人退出圈子,问最后留下的是原来第几号的那位。

程序分析:无。

实例:

 1 #include <stdio.h>
 2 void main()
 3 {
 4     int num[50],n,*p,j,loop,i,m,k;
 5     printf("请输入这一圈人的数量:\n");
 6     scanf("%d",&n);
 7     p=num;
 8     //开始给这些人编号
 9     for (j=0;j<n;j++)
10     {
11         *(p+j)=j+1;
12     }
13     i=0;//i用于计数,即让指针后移
14     m=0;//m记录退出圈子的人数
15     k=0;//k报数1,2,3
16     while(m<n-1)//当退出的人数不大于总人数时,即留下的人数至少是一个人
17         //这句不能写成m<n,因为假设有8人,当退出了6人时,此时还是进行人数退出,即m++,
18         //这时是7<8,剩下的一个人自己喊1,2,3那么他也就退出了,将不会有输出
19     {
20         if (*(p+i)!=0)//如果这个人的头上编号不是0就开始报数加1,这里采用的方法是报数为3的人头上编号重置为0
21         {
22             k++;
23         }
24         if (k==3)
25         {    k=0;    //报数清零,即下一个人从1开始报数
26             *(p+i)=0;//将报数为3的人编号重置为0
27             m++;    //退出人数加1
28         }
29         i++;      //指针后移
30         if (i==n)//这句很关键,如果到了队尾,就要使指针重新指向对头
31             //并且它只能放在i++后面,因为只有i++了才有可能i==n
32         {
33             i=0;
34         }
35         
36         
37     }
38     printf("现在剩下的人是:");
39     for (loop=0;loop<n;loop++)
40     {
41         if (num[loop]!=0)
42         {
43             printf("%2d号\n",num[loop]);
44         }
45     }
46     
47 }

以上程序执行输出结果为:

请输入这一圈人的数量:
8
现在剩下的人是: 7号

感谢你的阅读,请用心感悟!希望可以帮到爱学习的你!!分享也是一种快乐!!!请接力。。。

点击查看原文,谢谢!

C 实战练习题目69

标签:第一个   数加   现在   计数   oid   style   方法   记录   不能   

原文地址:https://www.cnblogs.com/kangyifan/p/13283676.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!