本帖最后由 chingwei2011 于 2015-10-12 13:14 编辑
忘了贴题目,就是15个人围一个圈,轮流报数1,2,3.报到3的退出游戏,下一位又从1开始报,以此类推,最后留下来的那个是多少编号。
对于这道题算法很多,这个算法我想了很久,很笨,倒是能最直接的翻译这道题。
#include <stdio.h>
int main(int argc, const char * argv[]) {
int last[15]={1,2,3,4,5,6,7,8,9,10,11,12,13,14,15};
static int count=1;// 一定要用静态修饰符 修饰,否则在flag==2的时候会出现死循环的问题。
int flag = 15;//15个人需要判断14次
while(flag > 1){
for(int i = 0; i < 15; i++){
if(count == 3 && last != 0){ //累计数3次的时候,从剩下的人中再排除一个
last = 0;//将被排除掉的人赋值0,表示已排除
count=1;//从新计算步数
flag--;
//printf("B [%d] ,flag=%d\n",i,flag);
}
else if(last != 0)
{
count++;
//printf("A [%d], count=%d\n",i,count);
}
}
}
for( int i =0 ;i < 15 ;i++)
if(last!=0){
printf("15人中第%d个是嫌疑人!\n",last);
}
|