zoukankan      html  css  js  c++  java
  • 那些说自己逻辑好的,过来切磋下啊

    今天在微信朋友圈里看到了这样一条信息:

    100只狗排成一行,分别以1、2、3……编号,从这些狗中选出偶数号的杀掉,剩下的狗重新从1开始编号,然后再选偶数杀掉……如此循环直到只剩下1只狗为止。
    请问这只狗要站在哪个位置才能保证存活时间最长(除了1号)?          

    起初,觉得这个很简单,在本子上随便傻瓜式的排列下,然后一个个排除就不行了嘛,然后又想了想,假如1000只,10000只呢???你这样傻瓜式是可以,但是,你这不是浪费时间吗?
     
    然后,我就开始coding了,设想有100只狗,那么,我就把这100只狗放在数组里面,然后,再循环这个数组的长度,为偶数的不做处理,不为偶数的,我们放在一个临时的笼子里面,去除的时候,不可能只去除一次,所以,要do,while循环。
     
    下面给大家展示两种写法,一个是C#的,一个是JS的
     
    C#写法:
        static void Main(string[] args)
        {
            //待去除狗的笼子
            int[] dogs = new int[100];
            //临时笼子
            List<int> tempdogs = new List<int> { };
            //100只狗,从1开始编号
            for(int i=0;i<100;i++)
            {
                dogs[i] = i + 1;
            }
            //去除轮数
            int kill = 0;
            do
            {
                kill++;
                for (int k = 0; k < dogs.Length; k++)
                {
                    if ((k + 1) % 2 != 0)
                    {
                        tempdogs.Add(dogs[k]);
                    }
                }
                dogs = tempdogs.ToArray();
                tempdogs.Clear();
            } while (dogs.Length > 2);
            {
                Console.WriteLine("截止到第"+kill+"轮,仍然存活的两只狗是:"+dogs[0]+","+dogs[1]);
            }
        }

    结果:

    js写法:

        window.onload = function () {
                killdog();
            }
         
            function killdog() {
                var arr = [];//临时笼子
                var dogs = [];//100只现成的狗
                for (var i = 0; i < 100; i++) {
                    dogs[i] = i + 1;
                }
                do {
                    for (var j = 0; j < dogs.length; j++) {
                        //偶数的干掉
                        if ((j + 1) % 2 != 0) {
                            arr.push(dogs[j]);
                        }
                    }
                    dogs = arr;//把临时存储的再次放入狗笼子里面
                    arr = [];//必须清除之前被干掉的狗
                } while (dogs.length > 2)
                {
                    document.write("剩余狗的编号为:"+dogs);
                }
            }
    

      结果为:

    以上就是我个人写得两种方法,可能写得不是太好,如果哪位大神能有更好的写法或者逻辑更好的来展现,请大神多多赐教,贴出代码,大家一起讨论下,可以是java,php,C++也可以是其他语言,总之,你有什么好的写法,麻烦呈现下,大家一起学习嘛!

    好了,今天闲来无事,就写到这,你还在等什么,开启电脑,写个呀

     
     
  • 相关阅读:
    路由重分发 最重要 最难 ccnp
    (01)Zookeeper简介
    (01)kafka以及消息系统的基本介绍
    (05)使用kafka脚本发送消息和接收消息
    (04)kafka多机多Broker(集群)的基本配置
    (03)kafka单机多Broker(伪分布式)的基本配置
    (02)安装配置kafka单Broker及其基本操作
    (02)安装zookeeper集群
    (09)使用xshell工具查看redis客户端,汉字显示乱码解决方法
    (08)redis之使用java客户端、spring连接redis、redis集群示例
  • 原文地址:https://www.cnblogs.com/dinghouchuanqi/p/5651490.html
Copyright © 2011-2022 走看看