zoukankan      html  css  js  c++  java
  • uva 305 Joseph

    点击打开链接uva 305

    思路: 数学+打表
    分析:
    1 传统的约瑟夫问题是给定n个人和m,每次数m次把当前这个人踢出局,问最后留下的一个人的编号
    2 这一题是前k个人是好人,后面k个是坏人。现在要求最小的m使得没有一个好人被踢出去的情况下k个坏人都被踢出
    3 按照传统的方法来分析的话,n个人的编号从0~n-1
       第一次  a[1] = (m-1)%n; // 这里由于人的编号是0~n-1
       第二次  a[2] = (a[1]+m-1)%(n-1);
       第i次     a[i] = (a[i-1]+m-1)%(n-i+1);
       那么我们可以知道每次的删除的人的编号,由于k最大14所以我们可以先打表找到1~14的解,然后输出即可。

    代码:

    #include<cstdio>
    #include<cstring>
    #include<iostream>
    #include<algorithm>
    using namespace std;
    
    int solve(int k){
        int pre;
        int tmp = k+1;
        int n = 2*k;
        while(tmp){
            if((tmp-1)%n >= k && (tmp-1)%n < 2*k){
                pre = (tmp-1)%n;
                int i;
                for(i = 2 ; i <= k ; i++){
                   int x = (pre+tmp-1)%(n-i+1); 
                   if(x < k || x >= 2*k)
                       break;
                   else
                       pre = x;
                } 
                if(i == k+1)
                    return tmp;
            }
            tmp++;
        }
    }
    
    int main(){
        int k , ans[20];
        for(int i = 1 ; i < 15 ; i++)
            ans[i] = solve(i);
        while(scanf("%d" , &k) && k)
            printf("%d
    " , ans[k]);
        return 0;
    }
    
    



  • 相关阅读:
    kubernetes yaml文件格式
    docker 镜像上传至私有仓库
    Docker Compose编排容器
    jenkins+gitlab+ansible+dockerfile+k8s自动发布代码
    kubernetes 命令行
    关于HDFS的读写流程
    vue中watched属性
    app中rem算法
    vue使用中的随笔
    react 表单获取多个input
  • 原文地址:https://www.cnblogs.com/jiangu66/p/3228697.html
Copyright © 2011-2022 走看看