现有1~100 共一百个自然数,已随机放入一个有98个元素的数组a[98].要求写出一个尽量简单的方案找出没有被放入数组的那2个数,并在屏幕上打印这2个数
1 void test7() 2 { 3 try 4 { 5 int[] a = new int[98]; 6 int[] num = new int[100]; 7 int[] num1 = new int[100]; 8 int countnum = 0; 9 int counta = 0; 10 int i; 11 for (i = 0; i < num.Length; i++) 12 { 13 num[i] = i + 1; 14 num1[i] = i + 1;//方法1用到 15 countnum = num[i] + countnum; 16 } 17 //随机放入 18 Random rand = new Random(); 19 int temp; 20 for (i = 0; i < a.Length; i++) 21 { 22 while (true) 23 { 24 temp = rand.Next(100); 25 if (num[temp] != 0) 26 { 27 num[temp] = 0; 28 a[i] = temp + 1; 29 break; 30 } 31 } 32 } 33 foreach (int aa in a) 34 { 35 counta = counta + aa; 36 37 Console.WriteLine(aa+";"); 38 } 39 40 #region 方法1 推荐,这才是插入完,再查找 41 int diff = countnum - counta; 42 List<int> list = num.Where(n => num.Contains(diff - n)).ToList<int>();//验证,num中只剩两个没变0的 43 List<int> list1 = num1.Where(n => num1.Contains(diff - n) && !a.Contains(n)).ToList<int>();//查找,针对的是没有处理过得原数组 44 Console.WriteLine("list.count:"+list.Count); 45 Console.WriteLine("list1.count:" + list1.Count); 46 foreach (int nn in list) 47 { 48 //if (!a.Contains(nn)) 49 //{ 50 Console.WriteLine("没有被放入数组的数(list):"); 51 Console.WriteLine(nn); 52 //Console.WriteLine("bingo"); 53 //} 54 } 55 foreach (int nn in list1) 56 { 57 //if (!a.Contains(nn)) 58 //{ 59 Console.WriteLine("没有被放入数组的数(list1):"); 60 Console.WriteLine(nn); 61 //Console.WriteLine("bingo1"); 62 //} 63 } 64 #endregion 65 66 #region 方法2 太投机取巧了,其实是在随机插入的过程中把插入的全置为0,剩下的就是没插入的 67 for (i = 0; i < a.Length; i++) 68 if (num[a[i] - 1] != 0) 69 num[a[i] - 1] = 0; 70 //输出 71 for (i = 0; i < a.Length; i++) 72 { 73 if (i % 10 == 0 && i > 0) 74 System.Console.WriteLine(); 75 System.Console.Write("{0,4}", a[i]); 76 } 77 System.Console.WriteLine(); 78 System.Console.Write("没有被放入数组的2个数:"); 79 for (i = 0; i < num.Length; i++) 80 if (num[i] != 0) 81 System.Console.Write("{0,4}", num[i]); 82 System.Console.WriteLine(); 83 #endregion 84 } 85 catch (Exception) 86 { 87 88 throw; 89 } 90 }