这是我的基础测试中的一道题目:耶稣有15个门徒,其中有一个就是出卖耶稣的叛徒,请用排除法找出这位叛徒:15人围坐一圈,从第一个开始报号:1,2,3,1,2,3……,凡是报到“3”就退出圈子,最后留在圈内的人就是出卖耶稣的叛徒,请找出它原来的序号。(C语言)
这道题困扰了我半个多小时。最后用计数器把它做出来了。但我感觉这个方法有些麻烦,应该还有更好的方法。麻烦那位大神给出一个好的简便的方向。多谢了~
- #include <stdio.h>
- int main()
- {
- int i,j,n,m,temp,step;
- printf("Please input the number of person(within 100):n=");
- scanf("%d",&n); /*Input the number of person.*/
- printf("Output the number of person:");
- int a[101];
- for(i=1;i<=n;i++){a[i]=i;printf("%d ",a[i]);}
- temp=0; /*'temp' is a counter of the figure person uttering.*/
- step=0; /*'step' counter the number of person which don't betray Jesus.*/
- m=0; //'m' is a counter of circle.
- while(step<n-1)
- {
- for(i=1;i<=n;i++)
- {
- if(a[i]!=0)
- {
- temp=temp+1;
- if(temp==3)
- {a[i]=0;
- temp=0;}
- }
- }
- step=0;
- m++;printf("\nThe leaving persons after %dth circle:",m);
- for(i=1;i<=n;i++)
- {
- if(a[i]==0)step++;
- else {j=i;printf("%d ",a[i]);}
- }
- }
- printf("\nThe person who betray Jesus is %d.\n",a[j]);
- return 0;
- }
复制代码 |
|