数据结构(八十三)
学习数据结构与算法过程中的心得体会以及知识点的整理,方便我自己查找,也希望可以和大家一起交流。
—— 圆圈中最后剩下的数字 ——
1.题目描述
0,1,···,n-1这n个数字排成一个圆圈,从数字0开始,每次从这个圆圈里删除第m个数字(删除后从下一个数字开始计数)。求出这个圆圈里剩下的最后一个数字。
例如,0、1、2、3、4这5个数字组成一个圆圈,从数字0开始每次删除第3个数字,则删除的前4个数字依次是2、0、4、1,因此最后剩下的数字是3。
示例
输入:
n = 5, m = 3
输出:
3
输入:
n = 10, m = 17
输出:
2
2.代码
c
int find_node(int n, int m) {
if (n == 1)
return 0;
int num = find_node(n - 1, m);
return (m + num) % n;
}
int lastRemaining(int n, int m){
return find_node(n, m);
}
调用递归会有些慢,所以直接用循环会比较好一点。
int lastRemaining(int n, int m){
int ans = 0;
for(int i = 2; i <= n; i++)
ans = (ans + m) % i;
return ans;
}