zoukankan      html  css  js  c++  java
  • POJ1012(约瑟夫问题)

    1、题目链接地址

      http://poj.org/problem?id=1012

      2k个人,前面k个是好人,后面k个是坏人,找一个数t,每数到第t时就去掉,使所有坏人在好人之前被杀掉。

      思路:约瑟夫公式的应用。

    2、源代码

    #include<iostream>
    using namespace std;
     
    int test(int k, int m)
    {
       int i, j;
       int n = 2 * k;
       j = 0;
       for( i = 0; i < k; i++)
       {
          j = (j + m - 1)  % (n - i);
          if(j < k )return 0;
       }
       
       return 1;
    }
     
    int main()
    {
       int out[14];
       int i, j;
       int t;
       for(i = 1; i < 14; i++)
       {
          j = i + 1;
          while(1)
          {
            if(test(i, j))
            {
               out[i] = j;
               break;
            }
       
            if(test(i, j + 1))
            {
               out[i] = j + 1;
               break;
            }
            
            j = i + j + 1;
          } 
       }
    
       while(cin >> t && t)
       {
          cout << out[t] << endl;
       }
     
       return 0;
    }
    作者:BestNow
    出处:http://www.cnblogs.com/BestNow/
    本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。
  • 相关阅读:
    汉诺塔
    破损的键盘
    解方程
    运输计划
    选学霸
    子集和的目标值
    棋盘染色2
    守卫者的挑战
    飞扬的小鸟
    攻克城堡
  • 原文地址:https://www.cnblogs.com/tianxue/p/3917008.html
Copyright © 2011-2022 走看看