找重复数与过河问题

原题为:1-1000不重复的数字和一个1-1000之间的随机数共1001个数字存入一个存储空间为1001数组中,找重复数字

        static void 找重复数(int[] arr)
        {
            for (int i = 0, j = 0; i < arr.Length; i++)
            {
                j += arr[i] - i;
                if (i == arr.Length - 1)
                {
                    Console.WriteLine(arr.Length - j);
                    return;
                }
            }
        }
        

 

原题为:4个女人晚上过河,过河速度分别为1,2,5,10分钟,每次过河必须带上仅有的一个电筒,求17分钟内过河的方式

        class Person
        {
            public Person(string Name, int Minute)
            {
                this.Name = Name;
                this.Minute = Minute;
            }
            public string Name { get; set; }

            public int Minute { get; set; }
        }

        static void 过河(Person[] persins, int concurrence)
        {
            var sort = persins.OrderBy(x => x.Minute).ToList();
            var target = new List<Person>();
            int minutes = 0;
            Func<Person[]> func = () =>
            {
                Person[] result = new Person[concurrence];
                for (var i = 0; i < concurrence && 0 < sort.Count(); i++)
                {
                    result[i] = sort[0];
                    sort.RemoveAt(0);
                }
                return result;
            };
            while (true)
            {
                var selector = func();
                Console.WriteLine(string.Join(",", selector.Select(x => x.Name)) + "前往对岸!花费" + selector.Max(x => x.Minute) + "分钟");
                minutes += selector.Max(x => x.Minute);
                Array.ForEach(selector, x => target.Add(x));
                if (sort.Count == 0) break;
                var backer = target.OrderBy(x => x.Minute).First();
                minutes += backer.Minute;
                Console.WriteLine(backer.Name + "送回!花费" + backer.Minute + "分钟");
                target.Remove(backer);
                sort.Add(backer);
            }
            Console.WriteLine("全部人员过河,共计花费" + minutes + "分钟");
            Console.ReadLine();
        }

static void Main(){

var persins = new Person[4];
persins[0] = new Person("A", 1);
persins[1] = new Person("B", 2);
persins[2] = new Person("C", 5);
persins[3] = new Person("D", 10);
过河(persins, 2);

}

 

posted @ 2016-03-25 16:59  hezl  阅读(270)  评论(0)    收藏  举报