题目是:耶稣有15个门徒,其中有一个就是出卖耶稣的叛徒,请用排除法找出这位叛徒:15人围坐一圈,从第一个开始报号:1,2,3,1,2,3……,凡是报到“3”就退出圈子,最后留在圈内的人就是出卖耶稣的叛徒,请找出它原来的序号。
我的解法是: - #include<stdio.h>
- int main()
- {
- int stu[15]={1,2,3,4,5,6,7,8,9,10,11,12,13,14,15};
- int left=15;
- int j=0;
- for(int count=1;left>1;count++)
- {
- while(stu[j]==0) //剔除出局的人,找出下一个被数的人
- {
- j++;
- if(j==15)
- j=0;
- }
- if(j==15) //防止数组下标溢出
- j=0;
-
- if(count==3) //使被数到3的人出局
- {
- stu[j]=0;
- count=0;
- left--;
- }
- j++; //下一个
- }
- for(int i=0;i<15;i++)
- {
- if(stu[i]!=0)
- printf("The badguy is number %d\n",i+1);
- }
- return 0;
- }
复制代码
总觉得这么解有点笨 请大神指导下更简便一点的方法
|