zoukankan      html  css  js  c++  java
  • 约瑟夫环【未完成】

    约瑟夫环

    题目描述

    n个人(0,1,2,3,4...n-1),围成一圈,从编号为k的人开始报数,报数报到m的人出队(报数是1,2,...m这样报的)。下次从出队的人之后开始重新报数,循环往复,当队伍中只剩最后一个人的时候,那个人就是大王。现在,给定n,k,m,请你求出大王的编号。

    输入描述

    /*
    输入一行包含三个整数n,k,m
    1<=n<=100,1<=k<=n-1,1<=m<=100
    */
    5 1 2
    

    输出描述

    /*
    输出一个整数
    */
    3
    
    #include<stdio.h>
    int main()
    {
        int n,k,m;
        scanf("%d %d %d",&n,&k,&m);
        int res=0;
        for(int i=1;i<=n;i++){
            res = (res+m)%i;
        }
        printf("%d
    ",(res+k)%n);
        return 0;
    }
    

    新约瑟夫环

    题目描述

    讲一个比较有意思的故事:约瑟夫是犹太军队的一个将军,在反抗罗马的起义中,他所率领的军队被击溃,只剩下残余的部队40余人,他们都是宁死不屈的人,所以不愿投降做叛徒。一群人表决说要死,所以用一种策略来先后杀死所有人。 于是约瑟夫建议:每次由其他两人一起杀死一个人,而被杀的人的先后顺序是由抽签决定的,约瑟夫有预谋地抽到了最后一签,在杀了除了他和剩余那个人之外的最后一人,他劝服了另外一个没死的人投降了罗马。我们这个规则是这么定的:
    在一间房间总共有n个人(编号0~n-1),只能有最后一个人活命。
    按照顺时针的顺序时,编号就是从小到大的。
    按照如下规则去杀人:
    • 所有人围成一圈
    • 顺时针(或逆时针)从1开始报数,每次报到q的人将被杀掉(顺时针逆时针交替进行,默认先进行顺时针)
    • 被杀掉的人将从房间内被移走
    • 然后从新方向上的下一个人开始重新报数,报到q的被杀掉,直到剩余一人
    你要做的是:当你在这一群人之间时,你必须选择一个位置以使得你变成那剩余的最后一人,也就是活下来。

    输入描述

    /*
    在第一行中输入2个正整数n、q(0 < n,q ≤ 1000),以空格分隔
    */
    5 2
    

    输出描述

    /*
    在一行输出最后活下来的人编号.
    */
    4
    
    //这题和第一题的区别是 该题顺时针逆时针交替进行!
    
    
  • 相关阅读:
    try? try! try do catch try 使用详解
    Swift Write to file 到电脑桌面
    NSLayoutConstraint 使用详解 VFL使用介绍
    automaticallyAdjustsScrollViewInsets 详解
    Swift 给UITableView 写extension 时 报错 does not conform to protocol 'UITableViewDataSource'
    OC Swift中检查代码行数
    Swift中 @objc 使用介绍
    SWift中 '?' must be followed by a call, member lookup, or subscript 错误解决方案
    Swift 中 insetBy(dx: CGFloat, dy: CGFloat) -> CGRect 用法详解
    求1000之内所有“完数”(注:C程序设计(第四版) 谭浩强/著 P141-9)
  • 原文地址:https://www.cnblogs.com/lwp-nicol/p/14277806.html
Copyright © 2011-2022 走看看