现有1~100 共一百个自然数,已随机放入一个有98个元素的数组a[98].要求写出一个尽量简单的方案找出没有被放入数组的那2个数,并在屏幕上打印这2个数

时间:2023-03-09 09:12:09
现有1~100 共一百个自然数,已随机放入一个有98个元素的数组a[98].要求写出一个尽量简单的方案找出没有被放入数组的那2个数,并在屏幕上打印这2个数
  void test7()
{
try
{
int[] a = new int[];
int[] num = new int[];
int[] num1 = new int[];
int countnum = ;
int counta = ;
int i;
for (i = ; i < num.Length; i++)
{
num[i] = i + ;
num1[i] = i + ;//方法1用到
countnum = num[i] + countnum;
}
//随机放入
Random rand = new Random();
int temp;
for (i = ; i < a.Length; i++)
{
while (true)
{
temp = rand.Next();
if (num[temp] != )
{
num[temp] = ;
a[i] = temp + ;
break;
}
}
}
foreach (int aa in a)
{
counta = counta + aa; Console.WriteLine(aa+";");
} #region 方法1 推荐,这才是插入完,再查找
int diff = countnum - counta;
List<int> list = num.Where(n => num.Contains(diff - n)).ToList<int>();//验证,num中只剩两个没变0的
List<int> list1 = num1.Where(n => num1.Contains(diff - n) && !a.Contains(n)).ToList<int>();//查找,针对的是没有处理过得原数组
Console.WriteLine("list.count:"+list.Count);
Console.WriteLine("list1.count:" + list1.Count);
foreach (int nn in list)
{
//if (!a.Contains(nn))
//{
Console.WriteLine("没有被放入数组的数(list):");
Console.WriteLine(nn);
//Console.WriteLine("bingo");
//}
}
foreach (int nn in list1)
{
//if (!a.Contains(nn))
//{
Console.WriteLine("没有被放入数组的数(list1):");
Console.WriteLine(nn);
//Console.WriteLine("bingo1");
//}
}
#endregion #region 方法2 太投机取巧了,其实是在随机插入的过程中把插入的全置为0,剩下的就是没插入的
for (i = ; i < a.Length; i++)
if (num[a[i] - ] != )
num[a[i] - ] = ;
//输出
for (i = ; i < a.Length; i++)
{
if (i % == && i > )
System.Console.WriteLine();
System.Console.Write("{0,4}", a[i]);
}
System.Console.WriteLine();
System.Console.Write("没有被放入数组的2个数:");
for (i = ; i < num.Length; i++)
if (num[i] != )
System.Console.Write("{0,4}", num[i]);
System.Console.WriteLine();
#endregion
}
catch (Exception)
{ throw;
}
}