题解 | #删数#
删数
https://www.nowcoder.com/practice/f9533a71aada4f35867008be22be5b6e
#include <iostream>
using namespace std;
/*出局之后更新一轮编号,以0开始编号,初始编号为0,1,...,n-1
旧编号old映射到新编号new的情况如下
...
m-1->n-2
m 出局,编号总数减1
m+1->0
m+2->1
m+3->2
...
可推断出old=(new+m+1)%n,本题m=2
则递推公式为f(n,m)=(f(n-1,m)+m+1)%n,f(1,m)=0(递归基)
*/
int Rank(int n) {
return n == 1 ? 0 : (Rank(n - 1) + 2 + 1) % n;
}
int main() {
int n;
while (cin >> n) {
cout << Rank(n) << endl;
}
return 0;
}
using namespace std;
/*出局之后更新一轮编号,以0开始编号,初始编号为0,1,...,n-1
旧编号old映射到新编号new的情况如下
...
m-1->n-2
m 出局,编号总数减1
m+1->0
m+2->1
m+3->2
...
可推断出old=(new+m+1)%n,本题m=2
则递推公式为f(n,m)=(f(n-1,m)+m+1)%n,f(1,m)=0(递归基)
*/
int Rank(int n) {
return n == 1 ? 0 : (Rank(n - 1) + 2 + 1) % n;
}
int main() {
int n;
while (cin >> n) {
cout << Rank(n) << endl;
}
return 0;
}