那些说自己逻辑好的,过来切磋下啊

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

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++也可以是其他语言,总之,你有什么好的写法,麻烦呈现下,大家一起学习嘛!

 

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

 
 
posted @ 2016-07-07 20:30  动我试试  阅读(518)  评论(4编辑  收藏  举报