14.约瑟夫环

来源:互联网 发布:微表情软件白金版 编辑:程序博客网 时间:2024/05/20 12:21
题目:n 个数字(0,1,…,n-1)形成一个圆圈,从数字0 开始,
每次从这个圆圈中删除第m 个数字(第一个为当前数字本身,第二个为当前数字的下一个数
字)。
当一个数字删除后,从被删除数字的下一个继续删除第m 个数字。
求出在这个圆圈中剩下的最后一个数字。

July:我想,这个题目,不少人已经见识过了。

分析:这道题有两种方法可以实现,第一种是链表实现进行模拟;第二种是用数学方法实现,时间比较快,我就用数学方法实现吧!

代码实现:

#include<iostream>using namespace std;int yue_se_fu(int n, int m)//下表是从0开始的{int res=0;for(int i=2;i<=n;i++)res=(res+m)%i;return res;}int main(){int n, m;while(cin >> n >> m){cout << yue_se_fu(n, m) << endl;}return 0;}


0 0
原创粉丝点击