delphij's Chaos

选择chaos这个词是因为~~实在很难找到一个更合适的词来形容这儿了……

11 Apr 2008

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

好久没做编码方面的东西了,今天在 火星 上看到一个挑战,一时兴起就做了一下。原题请看 这里

既然是挑战,我目前的算法对于每个数来说都是常数时间,欢迎大家继续拍砖,我的代码2天后公布(我用的是C语言,大家自便)。

#include <stdio.h>
#include <stdlib.h>

static const char alphanum[] = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ"; 
static const char alphabet[] = "ABCDEFGHIJKLMNOPQRSTUVWXYZ"; 

int
main(void)
{
        int i;

        /* 000 - 999 */
        for (i=0; i<=999; i++)
                printf("%03d\n", i);

        /* 1000 - 3599 (26*100=2600 total) */
        for (; i <= 3599; i++)
                printf("%c%02d\n", alphabet[(i-1000)/100], i%100);

        /* 3600 - 12959 (36*26*10 = 9360 total) */
        for (; i <= 12959; i++)
                printf("%c%c%d\n", alphanum[(i-3600)/260],
                    alphabet[((i-3600)/10)%26], i%10);

        /* 12960 - 46655 (36*36*26 = 33696 total) */
        for (; i <= 46655; i++)
                printf("%c%c%c\n", alphanum[(i-12960)/936],
            alphanum[((i-12960)/26)%36], alphabet[(i-12960)%26]);

        return 0;
}