一. 实验要求
这是一个实际的项目衍生出来的核心算法之一。防伪码是我们现在经常在商品上看到的防伪手段之一,现在需要编写一个防伪码生成器,按照输入参数生成防伪码,并且把生成的时间及指定的防伪码输出。
1)防伪码的组成
防伪码由以下字符组成:0123456789ABCDEFGHJKLMNPQRSTUVWXYZ
(数字1和字母I相近、数字0和字母O相近,所以去掉字母I和字母O。全部字母大写) \
2)在命令行中输入2个参数,分别是:
防伪码长度
防伪码个数
例如:在命令行中调用程序为:学号.exe 10 10000
指的是防伪码长度为10,生成10000个防伪码。
3)防伪码的生成及注意事项
防伪码的长度由命令行参数决定;
所生成的防伪码不能重复(按照以上例子,生成了10000个防伪码,这10000个防伪码就肯定不能重复)
二. 设计思路
用Random.Next()的方法,在字符串中随机取值,然后将其加入HashSet<>中,去重,若重复则重新取值加入。
核心代码:
for (int j = 0; j< icount; j++)
{
ma = "";
for (inti = 0; i < a; i++)
{
intnum = random.Next(34);
ma += strTableChar[num];
}
if (!d.Add(ma))
{
icount--;
}
}
三. 程序运行效果图
1. exe 10 10000
2. exe 10 1000000
3. exe 50 1000000
实验总结
此次实验困难点在于怎么有效去重,并使用更短的时间,一开始没有用HashSet<>方法,采用初始的字符串比较,耗时太长。后上网查阅资料后,用Hashset<>方法去重,大大节约了时间。也是使自己加深了对泛型的了解。