namespace random_1000_6 { public partial class Form1 : Form { public char[] anum ={ '4', '5', '7' }; public bool checkexsit(string a, char[] b) { bool temp = false; for (int i = 0; i < b.Length; i++) if (a.IndexOf(b[i]) > -1) temp = true; return temp; } //写日志的函数 public static void writeLog(string message) { try { StreamWriter writer = null; string filePath = "log.txt"; if (File.Exists(filePath)) { writer = File.AppendText(filePath); } else { writer = File.CreateText(filePath); } writer.WriteLine(message); writer.Close(); } catch (Exception e) { //把错误日志写到另一个文本文件中 } } public Form1() { InitializeComponent();
} private void button1_Click(object sender, EventArgs e) { listBox1.Items.Clear(); int mm = Convert.ToInt32(textBox1.Text); if (mm<=0) throw new ArgumentException("个数必须大于0", "length"); int[] rs = new int[mm]; Random rdm = new Random(unchecked((int)DateTime.Now.Ticks)); for (int i = 0; i < mm; i++) { rs[i] = rdm.Next(100000, 999999); if (checkexsit(Convert.ToString(rs[i]), anum)) { i = i - 1; } } for (int i = 0; i < mm; i++) { listBox1.Items.Add(rs[i]); writeLog(Convert.ToString(rs[i])); } } private void button2_Click(object sender, EventArgs e) { Application.Exit(); } } }以前做的生成指定个数的随机不重复,且不含某些数字的随机数.比如上面是不含4,5,7的随机不重复的6位数,可以根据需要修改哈
用的桶排序,速度相当快了! class Program { //用的是桶排序 static void Main(string[] args) { Random rnd = new Random(1); int rang = 10000; int size = 1000000;//这个是数字大小的范围。 bool[] flag = new bool[size]; for(int i = 0;i < rang;i++) { int k; do k = rnd.Next(size); while(flag[k]); flag[k] = true; } for(int i = 0;i < size;i++) if(flag[i]) Console.Write("{0}\t", i); } }
{
public partial class Form1 : Form
{
public char[] anum ={ '4', '5', '7' }; public bool checkexsit(string a, char[] b)
{
bool temp = false;
for (int i = 0; i < b.Length; i++)
if (a.IndexOf(b[i]) > -1)
temp = true;
return temp;
} //写日志的函数
public static void writeLog(string message)
{
try
{
StreamWriter writer = null;
string filePath = "log.txt";
if (File.Exists(filePath))
{
writer = File.AppendText(filePath);
}
else
{
writer = File.CreateText(filePath);
}
writer.WriteLine(message);
writer.Close();
}
catch (Exception e)
{
//把错误日志写到另一个文本文件中
}
} public Form1()
{
InitializeComponent();
} private void button1_Click(object sender, EventArgs e)
{
listBox1.Items.Clear();
int mm = Convert.ToInt32(textBox1.Text);
if (mm<=0)
throw new ArgumentException("个数必须大于0", "length");
int[] rs = new int[mm];
Random rdm = new Random(unchecked((int)DateTime.Now.Ticks));
for (int i = 0; i < mm; i++)
{
rs[i] = rdm.Next(100000, 999999);
if (checkexsit(Convert.ToString(rs[i]), anum))
{
i = i - 1;
}
}
for (int i = 0; i < mm; i++)
{
listBox1.Items.Add(rs[i]);
writeLog(Convert.ToString(rs[i]));
}
} private void button2_Click(object sender, EventArgs e)
{
Application.Exit();
}
}
}以前做的生成指定个数的随机不重复,且不含某些数字的随机数.比如上面是不含4,5,7的随机不重复的6位数,可以根据需要修改哈
class Program
{
//用的是桶排序
static void Main(string[] args)
{
Random rnd = new Random(1);
int rang = 10000;
int size = 1000000;//这个是数字大小的范围。
bool[] flag = new bool[size];
for(int i = 0;i < rang;i++)
{
int k;
do
k = rnd.Next(size);
while(flag[k]);
flag[k] = true;
}
for(int i = 0;i < size;i++)
if(flag[i])
Console.Write("{0}\t", i);
}
}
时间复杂度是O(n)级的,不能再低了。
Guid.ToString()的方法不会用哈~~
开始排序:;
使用 array.Sort()对其进行排序。
遍历排序后的数组,如果相邻的值相等,则另外生成一个随机数来覆盖它,返回到开始排序如果能够到达数组的尾部,则证明此时的数组中没有了相同的数。但是有个问题,就是此时的数组是顺序排列的,那它的随机性应该不够。因此在RUN下列算法:
重新生成两个数组,一个用于存放最终输出,命名为A,另一个作为临时表,命名为B
循环,遍历当前数组,并生成一个0-9999之间的随机数,命名为C
if(B[C] == 0 && A[C] >=0)
{
B[C] = A[C];
A[C] = -1;
}//假设随机数范围 > 0
else 重新生成随机数下标这样做的好处就是它的运算量比较小,用空间换取时间。
MSN:[email protected]
e_mail:[email protected]
int j = 0;
Random rd = new Random();
while (lst.Count < 10000)
{
j=rd.Next(1, 10001);
if (lst.Contains(j) == false)
{
lst.Add(j);
Console.Write(j.ToString()+" ");
}
}