int joseph(int n);
int main(void) {
// 约瑟夫环
int x = joseph(12);
printf("%d\n", x);
return 0;
}
int joseph(int n) {
// 边界条件
if (n == 1 || n == 2) return 1;
// 递归公式
if (n & 0x1) {//判奇偶
return 2 * joseph(n >> 1) + 1;//n=2x,最右的一位0/1无影响(都被移位去掉了)(奇偶结果一样
}
return 2 * joseph(n >> 1) - 1;
}
约瑟夫环求解
最新推荐文章于 2024-11-07 23:24:07 发布