zoukankan      html  css  js  c++  java
  • 聪明的情侣算法题

    酋长的女儿艾丽要出嫁了,按以往的风俗习惯,要搭个高台,台下是众多的求婚者,艾丽在台上扔束花,扔在台下谁身上,艾丽就得嫁给谁。但她担心落不到心爱的雷蒙身上。艾丽私下约雷蒙商量如何是好。雷蒙想出了一个主意……艾丽便和父亲说:“我不愿意搭台撒花,这么多人来,挤在一起乱哄哄的,没秩序。”父亲说,“不这样也可以,但结婚时要当场在人群中决定嫁给谁,不许指名,方法你自己定。”艾丽高兴的告诉主持人如何行事。婚日来临,人群拥挤,主持人叫求婚者排成一队,雷蒙在队外数了数队列共有101人,于是自己找了个合适的位置也站在队列中,主持人要大家从前往后1,2,1,2……报数,报单数的退出场外,余下的人位置不变,再重新从前往后1,2,1,2……报数,报单数的退场,如此下去最后只剩一人,艾丽便嫁给谁。大家惊奇的发现最后剩下的竟是雷蒙。请用程序回答雷蒙刚开始站在队列中的第几个位置。

    以下是某前辈的代码。  (C++)

    int main(){
        int pos[102];  
        int persons = 102;
        for (int i = 0; i < 102; i++)
        {
            pos[i] = i + 1;
        }
        while (persons != 1)
        {
            for (int i = 0, k = 1; k < persons; i++, k += 2)
            {  //pos[persons] 中保留剩下的人, 往前拷贝。  
                pos[i] = pos[k];
            }    
            persons /= 2;
        }
        cout<<"雷蒙的位置是:"<<pos[0]<<endl;// pos[0]  就是最后剩下的位置 也就是雷蒙的位置
    }

    以下是我的代码———————捂脸!(C#)

    感觉自己写的实在是太菜了,要继续努力

    public static void main()
            {
                int[] people = new int[103];
                for (int i = 1; i < people.Length; i++)
                {
                    people[i] = i;
                }
                while (people[2] != 0)
                {
                    for (int i = 1; i < people.Length; i++)
                    {
                        if (i % 2 != 0)
                        {
                            people[i] = 0;
                        }
                    }
                    people = fill(people);
                }
                Console.WriteLine("雷蒙站在:" + people[1].ToString());
            }
            public static int[] fill(int[] OldArr)
            {
                int[] NewArr = new int[OldArr.Length];
                int now = 1;
                for (int i = 0; i < OldArr.Length; i++)
                {
                    if (OldArr[i] != 0)
                    {
                        NewArr[now] = OldArr[i];
                        now++;
                    }
                }
                return NewArr;
            }
  • 相关阅读:
    Linux的优缺点,Linux与windows的区别
    一文带你读懂 Mysql 和 InnoDB存储引擎
    由浅入深一个Demo带你认识Restful风格的架构
    同步锁Synchronized与Lock的区别?
    认识多线程中start和run方法的区别?
    Java多线程与并发相关问题
    初识WebSocket
    Tomcat与Nginx服务器的配合使用及各自的区别
    Java内存模型相关原则详解
    你对区块链的理解还停留在炒币上吗
  • 原文地址:https://www.cnblogs.com/shenwuyu/p/4529926.html
Copyright © 2011-2022 走看看