使用 3 个字符生成 200 个唯一的 40 个字符的字符串

Generate 200 unique 40-char strings using 3 chars

我想仅使用 'a'、'b' 或 'c' 生成至少 200 个唯一的 40 个字符的字符串。例如,一个好的字符串应该是 "aaaa...aaaa"(40 个字符)。到目前为止,这是我的方法:

char newid[41]; sprintf(newid, "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa%\n", "bbbb");

另一种方法:

char newid[41];
char* pad[41] = "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa;
sprintf(newid, "%s%s\n", pad+4, "bbbb");

但我仍然不知道如何创建一个循环来自动执行该过程...(抱歉,我是 C 语言的菜鸟)。请帮忙;任何提示或方法表示赞赏!谢谢!

2^64 > 3^40 所以只需选择 200 (不同) 12157665459056928801 以下的随机 64 位数字并转换为基数 3(abc "digits" 而不是通常的 012).

使用伪随机数生成器在 'a'、'b' 和 'c' 之间随机选择。为加强唯一性,请跟踪以前生成的 newid 值并丢弃重复项

#include <stdlib.h>
#include <string.h>
void generate() {
    char previous[199][40+1];
    char newid[40+1];
    int i, j, unique;
    srand(time(NULL));
    newid[40] = '[=10=]';
    for(i=0; i < 200; i++) {
        for(j=0; j < 40; j++) {
            newid[j] = 'a' + (rand() % 3);
            }
        /* confirm newid is 'unique' */
        unique=1;   
        for(j=0; unique && j < i; j++) {
            if (strcmp(previous[j], newid) == 0)
                unique=0;
            }
        if (!unique) {
            /* discard duplicate */
            i--;
            continue;
            }
        /* save newly genererated unique value */
        strcpy(previous[i], newid);
        printf("%s\n", newid);
        }
    }