Redian新闻
>
Josephus problem 有一句话没看懂
avatar
Josephus problem 有一句话没看懂# JobHunting - 待字闺中
l*y
1
long long Joseph(long long n, int k)
{
long long d = n/k;
long long res = Joseph(n-d, k);
res -= n % k;
if (res < 0) res += n;
else res += res / (k-1);-------->这是要干什么?
return res;
}
没明白这句话,网上也没找到清楚的答案,wiki上说的很含糊,谁给解释以下,谢谢了
avatar
l*y
2
ding

【在 l*********y 的大作中提到】
: long long Joseph(long long n, int k)
: {
: long long d = n/k;
: long long res = Joseph(n-d, k);
: res -= n % k;
: if (res < 0) res += n;
: else res += res / (k-1);-------->这是要干什么?
: return res;
: }
: 没明白这句话,网上也没找到清楚的答案,wiki上说的很含糊,谁给解释以下,谢谢了

avatar
I*g
3
杀完快一圈的时候还剩n-d 个人,从编号 n-n%k 的人又会重复这个过程,
所以先递归求解(n-d, k)的解,然后推(n,k)的解
对(n-d, k)的解x有两种情况
(1)编号 < n%k, 这说明原来就是从编号 n-n%k到尾部的那些人
所以x+ n - n%k就是解
(2)不然就要看插多少个人
每k-1个人插一个人, 所以 += res/k-1
avatar
l*a
4
赞。
另lz抄少了n/k = 0的情况。

【在 I*********g 的大作中提到】
: 杀完快一圈的时候还剩n-d 个人,从编号 n-n%k 的人又会重复这个过程,
: 所以先递归求解(n-d, k)的解,然后推(n,k)的解
: 对(n-d, k)的解x有两种情况
: (1)编号 < n%k, 这说明原来就是从编号 n-n%k到尾部的那些人
: 所以x+ n - n%k就是解
: (2)不然就要看插多少个人
: 每k-1个人插一个人, 所以 += res/k-1

相关阅读
logo
联系我们隐私协议©2024 redian.news
Redian新闻
Redian.news刊载任何文章,不代表同意其说法或描述,仅为提供更多信息,也不构成任何建议。文章信息的合法性及真实性由其作者负责,与Redian.news及其运营公司无关。欢迎投稿,如发现稿件侵权,或作者不愿在本网发表文章,请版权拥有者通知本网处理。