zoukankan      html  css  js  c++  java
  • poj1012

    题目大意:约瑟夫
    约瑟夫的问题是众所周知的,给那些不懂这个的人来说的,有n个人编号1....n,然后他们围城一个圈,到最后只能有一个人存活下来,约瑟夫足够聪明来选最后位置的人,因此拯救了他的生命这样一件事情。例如当n=6,m=5的时候,人们将会执行命令5, 4, 6, 2, 3然后1存活,假设有k个好人和k个坏人,在一个圈内,前k个好人后k个坏人,你必须找到最小的m使好人死完之前把坏人全部弄死(也就是说最后存活的是前k个内的编号就行吧)

    试试看吧,试做一下;

    理解错了,应该是让前面的好人全部存活,坏人全部挂掉.........试着暴力了一下,不过很悲剧连
    10的结果都跑不出来

    终于A掉- -
    #include<iostream>
    using namespace std;
    #define maxn 40
    int JosePh(int k, int m)
    {
        int i=0, a[maxn]={0}, n=2*k, T=k;
        while(T--)
        {
            int j=0;
            int t = (m+k+T+1)%(k+T+1);
            while(j<=t)
            {
                if(i == n)i=0;
                if(a[++i] == 0)
                    j++;
            }
            if(i <= k)
                return 0;
            a[i] = 1;
        }
        return 1;
    }
    int main()
    {
        int i, k, a[maxn]={0};
        for(k=1; k<14; k++)
        {
         for(i=1; ; i++)
            {
                if(JosePh(k, i) == 1)
                    break;
            }
        a[k] = i+1;
        }
        while(cin >> k, k)
        {
            cout << a[k] << endl;
        }
        return 0;

    } 

  • 相关阅读:
    第三方登录(QQ登录)开发流程详解
    编译PHP并与Ngnix整合
    Ngnix的日志管理和用定时任务完成日志切割
    Ngnix 安装、信号量、虚拟主机配置
    Redis命令操作详解
    Redis的安装和部署
    消息队列
    Ubuntu中Google Chrome安装
    关于双系统下Ubuntu不能访问Windows中某个盘的问题
    numpy.random.shuffle()与numpy.random.permutation()的区别
  • 原文地址:https://www.cnblogs.com/liuxin13/p/4383944.html
Copyright © 2011-2022 走看看