黑马程序员技术交流社区
标题:
一道笔试题求解
[打印本页]
作者:
墨蹄
时间:
2014-4-5 09:55
标题:
一道笔试题求解
本帖最后由 墨蹄 于 2014-4-9 12:04 编辑
1-10000 共10000个数 组成数组(顺序随机),从中随机删除5个数,怎么
快速
找出这5个数是什么?
作者:
百川
时间:
2014-4-5 11:06
想了想最简单的还是用list.contains。问题想太复杂也没结果。方法步数小的通用性就差。下面是代码,为了简单我只生成了一个5位的数组,来模拟删除后的数组。
List<int> iList = new List<int>();
Random r = new Random();
int i;
while (iList.Count < 5)//生成删除后的数组
{
i = r.Next(1, 11);
if (!iList.Contains(i))
{
iList.Add(i);
}
}
//for (int j = 0; j < iList.Count; j++)
//{
// Console.WriteLine(iList[j]);
//}
//Console.ReadKey();
List<int> listend = new List<int>();
for (int j = 0; j < 10; j++)//遍历循环,10000个就需要10000次contains
{
if (!iList.Contains(j))
{
listend.Add(j);
}
}
for (int j = 0; j < iList.Count; j++)
{
Console.WriteLine(listend[j]);
}
Console.ReadKey();
复制代码
作者:
mdb
时间:
2014-4-5 12:40
直接使用数组还真不太好找,我也主要是用了list.IndexOf()方法,思路是占位置的方法,先初使一个数组,然后将原来被删过后的数组在新的数组里占个位置,最后找出没被占过的索引就是被删掉的数
List<int> iList = new List<int>();
Random r = new Random();
int i;
while (iList.Count < 10000)//生成删除前的数组
{
i = r.Next(1, 10001);
if (!iList.Contains(i))
{
iList.Add(i);
}
}
int[] delarr = new int[5];// 生成要删除的数
int delid = 0;
while (true)
{
int n = r.Next(1, 10001);
if (delarr.Contains(n))
continue;
delarr[delid] = n;
delid++;
if (delid == 5)
break;
}
foreach (int n in delarr) // 删除
{
iList.Remove(n);
}
// 主要部份,寻找被删除数
List<int> allarr = new int[10000].ToList();
for (int j = 0; j < iList.Count; j++)
{
int id = iList[j];
allarr[id - 1] = id;
}
for (int j = 0; j < 5; j++)
{
int id = allarr.IndexOf(0);
Console.WriteLine(id + 1);
allarr[id] = 99999;
}
//-----------------------
Console.Write("原被删除数:"); // 输出
foreach (int a in delarr)
{
Console.Write(a + ",");
}
//-----------------------
复制代码
代码看着繁琐,但主要部份也就十二行...
作者:
惊风侠
时间:
2014-4-6 15:38
看不懂。
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2