找重复数与过河问题
原题为: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);
}

浙公网安备 33010602011771号