您的位置: 网站首页 >> 网络编程 >> asp.net >> 算法挑战 36进制条码序列号生成器

算法挑战 36进制条码序列号生成器

作者:Shinn | 时间:2008-4-13 8:42:37 | 来源:博客园

最近一个案子涉及到条码打印.要求是唯一的序列.中间有一个日期,最后3位为流水号.但打印的张数会超过999;

 

此算法我在网上有搜索,暂时感觉我自己的算法最先进(典型的程序员"自大"症)
发了我一天的时间,期间还与同事有讨论,感觉启示很大,所以先放出来,大家练练算法.一个星期后我放出代码.

 

因此必须用到26个大写字母,现在要求如下.999以前就是普通数字(001~999),再多就开始在百位使用字母即999的后一个数字为A00此时十位和个位还不能使用字母(平时打印会少于3600张,为了客户看起来方便),只有在百位将Z用完后才允许在十位使用字母,十位用完才允许个位使用字母

 

用36进制的话3位可以表示36*36*36=46656个数字

 

注意事项:


1)不能重复
2)数字个数应达到46656个
3)效率不能太低
4)请在本地测试没有重复序列号

 

由于在家没有代码,先给出测试的伪代码


//定义一个新list<string> nums
//i从0到46655循环
//输入i获取序列号num
//nums中是否包含num
//不包含就将num添加到nums
//包含就输出该重复序列
//循环完毕
//检查nums中的num个数是否为46656

 

有网友提到什么时候出现3字母.

 

我是在在Z99的后一个数字即为0A0,

而在0A9之后的一个数字为1A0

ZA9的后一个数字为0B0

ZZ9的后一个数字为00A

00Z的后一个数字为01A(请思考为什么)

 

我编写的算法已经用到案子中去了,且经过测试可以获得所有46656个数字.(代码在下周五放出,呵呵),期间为了加快运算速度,我使用了表驱动法,取得了较好的计算效率.
另外计划写个关于表驱动法的小文.
 

我来说两句

验证码: ( 登陆 / 注册 )