题目:耶稣有15个门徒,其中有一个就是出卖耶稣的叛徒,请用排除法找出这位叛徒:15人围坐一圈,从第一个开始报号:1,2,3,1,2,3……,凡是报到“3”就退出圈子,最后留在圈内的人就是出卖耶稣的叛徒,请找出它原来的序号。(C语言)
实现代码(仅供参考):
/***********************************************************************
**m总人数,则标号为0~m-1 n为要数的数
**成功返回序号,失败返回-1
***********************************************************************/
int find_badman(int m, int n)
{
int i;
int badman;
if (m <= 0 || n <= 0) {
return -1;
}
badman = 0; /* 当只有一个人时,编号为0的出圈 */
for (i = 2;i <= m;i++) { /* 循环num-1次将剩下一个人 */
badman = (badman + n % i) % i; /* 这样写易理解,或(badman+n)%i */
}
return badman + 1; /* 程序从0编号,返回时应+1 */
}
|
|