zoukankan      html  css  js  c++  java
  • UVa 1394: And Then There Was One

    设置一个数组Winner记录经典约瑟夫问题中的剩余者即可递归解决该问题。

    注: 约瑟夫问题:有编号为0~n-1的n个人,从0号开始报数1,2,3......报到k的杀死,然后从下一个人开始继续报数1,2,3......直到剩下最后一个人。约瑟夫想要活下来,问他一开始需要站在几号位置(编号为几)。

    数组Winner也可以只用一个变量代替。

    我的解题代码如下:

    #include <iostream>
    #include <cstdio>
    #include <cstring>
    
    using namespace std;
    //#define MAXN 10005
    //int Winner[MAXN]; //Winner[i]表示约瑟夫问题中初始有i个人(编号0~i-1),最后剩余者的编号
    int main()
    {
    	int n,k,m;
    	while(cin >> n >> k >> m && n!=0)
    	{
    		//init
    //		Winner[1] = 0;
    		int Winner = 0;
    		for(int i=2; i<n; i++)
    		{
    //			Winner[i] = (Winner[i-1]+k)%i;
    			Winner = (Winner+k)%i;
    		}
    //		cout << (Winner[n-1]+m)%n+1 << endl;
    		cout << (Winner+m)%n+1 << endl;
    	}
    	return 0;
    }
  • 相关阅读:
    每周总结13
    每周总结12
    每周总结11
    每周总结10
    每周总结9
    启明5-1总结
    启明4-30团队进度博客
    期末总结
    每日日报2021.6.11
    每日日报2021.6.10
  • 原文地址:https://www.cnblogs.com/pangblog/p/3268762.html
Copyright © 2011-2022 走看看