美文网首页
约瑟夫环问题

约瑟夫环问题

作者: ffffffffffffly | 来源:发表于2019-01-19 00:01 被阅读0次

编号1~n
报数 k 的人死
某一阶段的人数 i
特殊报数 m

思路

先编号n-1来算,再逆推,记得结果都要+1

  • f[1] = 0,
  • f[i] = (f[i-1] + k) % i

变形

  1. 先杀死第m个人,再报数k的人死。
    poj 3517 And Then There Was One
#include <iostream>
using namespace std;
int main()
{
    int n, k, m;
    int ans;
    while(cin >> n >> k >> m && (n || m || k))
    {
        ans = 0;
        for(int i=2; i<=n-1; i++)
            ans = (ans+k)%i;
        ans = (ans + m)%n; //最后换成+m
        cout << ans + 1 << endl;
    }
    return 0;
}
  1. 第1轮,报1的人死,
    第2轮,报2的人死,
    ……
    ……
    第n-1轮,报n-1的人死。
    hdu 5643 King's Game
#include <iostream>
using namespace std;

int main()
{
    int t, n;
    int ans;
    while(cin >> t)
    {
        while(t--)
        {
            cin >> n;
            ans =0;
            for(int i=2, j=n-1; i<=n; i++,j--)
                ans = (ans + j)%i; //换成+j
            cout << ans+1 << endl;
        }
    }
    return 0;
}
  1. 编号1~n,要保留编号为x的人,求k的值(暴力求解)
    ZOJ1088——System Overload
#include <iostream>
using namespace std;
//第一轮第m死,之后为了保留x,求k的最小值
int  joseph(int n, int k)
{
    int ans =0;
    for(int i=2; i<n; i++)
        ans = (ans+k)%i;
    ans = (ans + 1)%n;
    return ans+1;
}

int main()
{
    int n, i;
    while(cin >> n && n)
    {
        for(i=1; ; i++)  //没有限制条件,可以大于n!!!
        {
            if(joseph(n, i) == 2)  //保留第2个
                break;
        }
        cout << i << endl;
    }
    return 0;
}

相关文章

  • 约瑟夫环问题

    约瑟夫环问题约瑟夫环描述:约瑟夫环(约瑟夫问题)是一个数学的应用问题:已知n个人(以编号1,2,3…n分别表示)围...

  • 约瑟夫环问题

    0~n-1个数排成环,每次从中删除第m个数字后,问最后剩下的数字是多少 思路:使用链表模拟环状结构,到达尾部时使其...

  • 约瑟夫环问题

    思路 递推,f(n)与f(n-1)的关系,已经f(1)已知,O(n)的复杂度求出结果。f(n) = (f(n-1)...

  • 约瑟夫环问题

    约瑟夫环:30个人(15个教徒和15个非教徒)坐船出海 船坏 需要把15个人扔到海里 其他人才能幸存 围成一圈从某...

  • 约瑟夫环问题

    参考文章 约瑟夫环之二(用递归的思想解决Josephus问题) 解释 解法 初始情况: 0, 1, 2 ........

  • 约瑟夫环问题

    问题描述:n个人(编号0~(n-1)),从0开始报数,报到(m-1)的退出,剩下的人继续从0开始报数。求胜利者的编...

  • 约瑟夫环问题

    题目:一圈人围坐,以数字K位第一个个人,叫道 M 的人自动出列,请写出出列顺序 第一种方法:使用单项循环链表实现 ...

  • 约瑟夫环问题

    在刷leetCode 的时候碰到了以下问题:给定一个从1 到 n 排序的整数列表。首先,从左到右,从第一个数字开始...

  • 约瑟夫环问题

  • 约瑟夫环问题

    问题描述 历史典故: 据说著名犹太历史学家 Josephus有过以下的故事: 在罗马人占领乔塔帕特后,39 个犹太...

网友评论

      本文标题:约瑟夫环问题

      本文链接:https://www.haomeiwen.com/subject/ywwodqtx.html