出局游戏

很久以前学C时, 就弄过出局游戏(约瑟夫环), 当时很感兴趣不过没有做出来

今天看到了一个java也里有类似的题, 觉得用面向对象来做更合适……

题目:30个人站成一个圆圈, 从第一个人开始, 每数9个人则出局一人,一共需要出局15人,求哪些编号的人是应该出局的

下面是C#版解法。

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace ConsoleApplication3
{
    class Program
    {
        static void Main(string[] args)
        {
            //共30个人
            int count = 30;
            //需要排除的有15个人
            int remainingCount = 15;
            //每数9个人出局1个人
            int position = 9;

            //构建环形链
            List<Person> list = new List<Person>();
            for (int i = 1; i <= count; i++)
            {
                Person p = new Person()
                {
                    Id = i,
                    PrevId = i == 1 ? count : i - 1,
                    NextId = i == count ? 1 : i + 1,
                    Out = false
                };
                list.Add(p);
            }

            //循环直到找出全部需要排除的人为止
            for (int j = 0, currId = 1; j < remainingCount;j++)
            {
                Person currPerson = list.Find(p => p.Id == currId);
                int theNextId = 0;
                for (int k = 0; k < position; k++)
                {
                    theNextId = currPerson.NextId;
                    currPerson = list.Find(p => p.Id == theNextId);
                }
                currPerson.Out = true;
                Person prev = list.Find(p => p.Id == currPerson.PrevId);
                prev.NextId = currPerson.NextId;
                Person next = list.Find(p => p.Id == currPerson.NextId);
                next.PrevId = currPerson.PrevId;
                currId = currPerson.Id;
            }

            //输出所有人的编号及是否出局
            foreach (Person p in list)
                Console.WriteLine(p);

            Console.ReadLine();
        }
    }

    public class Person
    {
        public int Id { get; set; }
        public int PrevId { get; set; }
        public int NextId { get; set; }
        public bool Out { get; set; }

        public override string ToString()
        {
            return string.Format("Id: {0} 是否出局:{1}"
                , this.Id > 9 ? this.Id.ToString() : " " + this.Id.ToString()
                , this.Out ? "---------->是" : "否");
        }
    }
}

上面的解法第一个出局的人是10号, 如果希望第一个出局按顺序是9号, 将初始的currId改成30号即可。

时间: 2024-10-09 03:53:35

出局游戏的相关文章

js消除小游戏(极简版)`

js小游戏极简版 (1) 基础布局 <div class = "box"> <p></p> <div class="div"></div> </div>     (2)简单的基础样式 * { margin: 0; padding: 0; } div.box { width: 1000px; height: 700px; border: 1px solid #008B8B; box-sizing:

[JLOI2013]卡牌游戏

题目描述 N个人坐成一圈玩游戏.一开始我们把所有玩家按顺时针从1到N编号.首先第一回合是玩家1作为庄家.每个回合庄家都会随机(即按相等的概率)从卡牌堆里选择一张卡片,假设卡片上的数字为X,则庄家首先把卡片上的数字向所有玩家展示,然后按顺时针从庄家位置数第X个人将被处决即退出游戏.然后卡片将会被放回卡牌堆里并重新洗牌.被处决的人按顺时针的下一个人将会作为下一轮的庄家.那么经过N-1轮后最后只会剩下一个人,即为本次游戏的胜者.现在你预先知道了总共有M张卡片,也知道每张卡片上的数字.现在你需要确定每个

uu农场开发游戏app详解

uu农场游戏系统开发(苏念.188.1414.7927)uu农场app开发 uu农场源码开发 uu农场模式开发 开发uu农场,14年,一批制作简单粗暴的H5小游戏,以现象级产品的名号,火遍的朋友圈,围住神经猫,别踩白块儿,2046等等,这些游戏的共同特点是牢牢抓住了朋友圈的分享分数功能,将自己的分数展示在朋友圈内,超过其他的朋友,标榜自己的技能或者智商上的优越,可以帮助用户在朋友圈内建立良好的自我形象,展示其自我特点,这样的产品获得了大量的用户青睐,2015年,各大营销公司纷纷效仿,退成出新,不

烧钱游戏----加入创业公司的一些感想

也许是厌倦了别人的指手画脚,也许是不甘于为她人做嫁衣,也许是享受了国家的政策扶持.近些年来,创业大潮越来越汹涌.最近,就有幸加入了一家创业型公司.接下来聊聊自己的一些感受. 以往的话,就是上班领工资,完全没有考虑过公司的运营成本.也许是之前的那些公司属于稳定型,甚至是上升型的公司,资金短缺的问题没有那么明显的缘故.而创业型公司,资金链显得至关重要.关乎发展,甚至,关乎存亡. 按理来讲,资金链属于管理层.决策层应该考虑的问题,作为公司的底层人员,有点咸吃萝卜淡操心的意思.不过,哲学指出,事物是普遍

东麓庄园游戏开发系统源码分析

东麓庄园游戏开发系统源码分析 袁生:151.1222.4001(微信同步)东麓庄园游戏,东麓庄园模式,东麓庄园理财,东麓庄园软件,东麓庄园app,东麓庄园源码,东麓庄园农场,东麓庄园平台,东麓庄园开发,东麓庄园返利,东麓庄园定制开发. 注册和交易注册后最低投资66元,普通领导人帮下级玩家注册激活收66元,转660个金币,其中6元是平台管理费.到达下级会员账号600个金币.会员之间交易不收手续费,果实兑换成金币平台收取10%的手续费.东麓庄园源码开发 151.1222.4001(微信同步) 东麓庄

JLOI 2013 卡牌游戏

问题描述: N个人坐成一圈玩游戏.一开始我们把所有玩家按顺时针从1到N编号.首先第一回合是玩家1作为庄家.每个回合庄家都会随机(即按相等的概率)从卡牌堆里选择一张卡片,假设卡片上的数字为X,则庄家首先把卡片上的数字向所有玩家展示,然后按顺时针从庄家位置数第X个人将被处决即退出游戏.然后卡片将会被放回卡牌堆里并重新洗牌.被处决的人按顺时针的下一个人将会作为下一轮的庄家.那么经过N-1轮后最后只会剩下一个人,即为本次游戏的胜者.现在你预先知道了总共有M张卡片,也知道每张卡片上的数字.现在你需要确定每

第1部分: 游戏引擎介绍, 渲染和构造3D世界

原文作者:Jake Simpson译者: 向海Email:[email protected] ------------------------------------------------------------第1部分: 游戏引擎介绍, 渲染和构造3D世界 介绍 自Doom游戏时代以来我们已经走了很远. DOOM不只是一款伟大的游戏,它同时也开创了一种新的游戏编程模式: 游戏 "引擎". 这种模块化,可伸缩和扩展的设计观念可以让游戏玩家和程序设计者深入到游戏核心,用新的模型,场景和

世界就是一场游戏——灵魂如何才不迷失

<世界就是一场游戏——灵魂如何才不迷失>   前  言 还从来没有什么东西,能给人类社会带来如此巨大的变化,除了科学. 科学改变了人类的认知.在科学出现之前,人们普遍相信神灵的存在,认为是神灵在主宰着世界.但科学引发了人们观念的大转变,无神论.唯物论.进化论成为了人们世界观中的主流思想. 科学改变了人类的能力.在科学技术的帮助下,人类变得空前强大,成功地占领了这个星球.自然界那些我们曾经的天敌,老虎.狮子.猎豹.豺狼,此时不是在野外狭窄的生存空间中苟延残喘,就是老老实实在动物园的笼子里晒太阳.

中国城市交通O2O高速飞行,又一场巨头的游戏

如今中国的城市经济正在飞速发展,但与此同时也带来了许多严重的交通问题.一时间,出行难成为了各大中小城市市民共同面临的难题,城市交通O2O的兴起却在某种程度上极大缓解了出行难的问题.于是,各种打车.拼车.专车等软件开始漫天飞舞,共同奏响城市交响曲.对于城市交通O2O的快速兴起,刘旷认为主要有以下几大因素: 1.从消费者的角度来看,目前中国的人口主要集中在城市,尤其是一.二线城市,这些城市的整体交通市场需求量非常大.而80后.90后正在成为各个城市的主流社会群体,年轻一代对于移动互联网产品的接受度都