娶公主

来源:互联网 发布:四方数据保密协议范本 编辑:程序博客网 时间:2024/06/11 16:07

若干求婚者排成一行,一二报数,报单数的退场。余下的人靠拢后再一二报数,报单数的退场,最后剩下的一位就可以娶公主为妻。若现在你站出来数一下,共有101人在你前面,你应站到哪一个位置才能娶到公主呢?

思路:多人报数问题,设报数变量k,k的值只有1和2,报到2之后又要变0使下次的人报数报1,报到1的将该编号的人赋0,当101个人都报完了,肯定还有很多留下的,这时候让队列从头开始凡是每有变成0的编号都可以参与报数。

代码:  (我算出来是74,和书上答案不一样,哪位大神碰巧看到此题,不妨算算看,不知道是不是我错了)

#include <stdio.h>main(){int a[101],i,j=0,k=0;for (i=0;i<101;i++)   //对101个人进行编号a[i]=i+1;i=0;while(j<100){if (a[i]!=0){k++;if (k==2){k=0;}if (k==1){printf("%d号退出\n",a[i]);  //模拟过程j++;a[i]=0;}}i++;if (i==101)i=0;}for (i=0;i<101;i++){if (a[i]!=0){printf("\n%d号位置",a[i]);break;}}}


0 0