求教:哈希算法 C#源代码:构建一个N全部为数字0的序列。然后使用哈希算法,将M(M<N)个非0数字随机并均匀地填充到这个总长为N的数字序列之中,替换掉原有位置上的0。 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 static void GetRandomList(int M, int N) { if (M > N || N <= 0) throw new ArgumentOutOfRangeException("M和N都必须大于零,且N不小于M"); List<int> listN = Enumerable.Repeat<int>(0, N).ToList(); List<int> listM = new List<int>(M); for (int i = 0; i < M; i++) listM.Add(i); //随机排序后,替换零 listM.Sort((i,j) => i.GetHashCode() + j.GetHashCode()); for(int i=0; i<N; i++) { listN[i] = listM[i % M]; Console.Write(listN[i] + " "); } }/*6 0 7 5 8 1 4 2 9 3 6 0 7 5 8 1 4 2 9 3 请按任意键继续. . .*/ 上面当N比较大时,由于是循环填充M序列,可以明显是有规律的,可以改成这样static void GetRandomList(int M, int N) { if (M > N || N <= 0) throw new ArgumentOutOfRangeException("M和N都必须大于零,且N不小于M"); List<int> listN = Enumerable.Repeat<int>(0, N).ToList(); List<int> listM = new List<int>(M); for (int i = 0; i < M; i++) listM.Add(i); //随机排序后,替换零 listM.Sort((i,j) => i.GetHashCode() + j.GetHashCode()); for(int i=0; i<N; i++) { listN[i] = listM[Math.Abs(Guid.NewGuid().GetHashCode()) % M]; Console.Write(listN[i] + " "); } }/* GetRandomList(10, 50);0 7 0 5 8 0 4 9 0 8 8 4 1 1 0 6 0 4 3 5 7 3 4 0 2 9 6 2 2 1 2 3 4 7 4 3 1 5 1 19 2 4 7 6 6 1 5 0 8 请按任意键继续. . .*/ GRIDVIEW动态生成列的问题 一个接口实现的问题 在强数据类型的数据集中,是否可以自定义查询的填充条件? 这样一个按钮,win7下点击反应很快,XP下很慢 读取 EXCEL 文件时同一列在读取了数字后,再读同列的字符就是为空.请问怎样避免? 怎样注销并重新启动应用程序? 菜鸟提问! 关于sp商 NHibernate配置的问题 asp.net,登录成功之后跳转到之前访问的页面 C# Winfrom 读取Excel 问题 求解 winform 如何判断页面是否已有右键菜单弹出
static void GetRandomList(int M, int N)
{
if (M > N || N <= 0) throw new ArgumentOutOfRangeException("M和N都必须大于零,且N不小于M");
List<int> listN = Enumerable.Repeat<int>(0, N).ToList();
List<int> listM = new List<int>(M);
for (int i = 0; i < M; i++)
listM.Add(i);
//随机排序后,替换零
listM.Sort((i,j) => i.GetHashCode() + j.GetHashCode());
for(int i=0; i<N; i++)
{
listN[i] = listM[i % M];
Console.Write(listN[i] + " ");
}
}
/*
6 0 7 5 8 1 4 2 9 3 6 0 7 5 8 1 4 2 9 3 请按任意键继续. . .
*/
{
if (M > N || N <= 0) throw new ArgumentOutOfRangeException("M和N都必须大于零,且N不小于M");
List<int> listN = Enumerable.Repeat<int>(0, N).ToList();
List<int> listM = new List<int>(M);
for (int i = 0; i < M; i++)
listM.Add(i);
//随机排序后,替换零
listM.Sort((i,j) => i.GetHashCode() + j.GetHashCode());
for(int i=0; i<N; i++)
{
listN[i] = listM[Math.Abs(Guid.NewGuid().GetHashCode()) % M];
Console.Write(listN[i] + " ");
}
}/* GetRandomList(10, 50);
0 7 0 5 8 0 4 9 0 8 8 4 1 1 0 6 0 4 3 5 7 3 4 0 2 9 6 2 2 1 2 3 4 7 4 3 1 5 1 1
9 2 4 7 6 6 1 5 0 8 请按任意键继续. . .
*/