编辑代码

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

#define TOTAL 10000
#define COMBO_LEN 15 // 14位数字 + '\0'

void generate_combo(char *buffer) {
    int nums, back;
    
    // 生成前区(1-35选5)
    for (int i = 0; i < 35; i++) nums[i] = i + 1;
    for (int i = 34; i > 0; i--) {
        int j = rand() % (i + 1);
        int temp = nums[i];
        nums[i] = nums[j];
        nums[j] = temp;
    }
    
    // 前区排序
    for (int i = 0; i < 5; i++) {
        for (int j = i+1; j < 5; j++) {
            if (nums[i] > nums[j]) {
                int temp = nums[i];
                nums[i] = nums[j];
                nums[j] = temp;
            }
        }
    }

    // 生成后区(1-12选2)
    for (int i = 0; i < 12; i++) back[i] = i + 1;
    for (int i = 11; i > 0; i--) {
        int j = rand() % (i + 1);
        int temp = back[i];
        back[i] = back[j];
        back[j] = temp;
    }

    // 后区排序
    if (back > back) {
        int temp = back;
        back = back;
        back = temp;
    }

    // 格式化字符串
    sprintf(buffer, "%02d%02d%02d%02d%02d%02d%02d",
            nums, nums, nums, nums, nums,
            back, back);
}

int main() {
    srand((unsigned int)time(NULL));
    char (*combos)[COMBO_LEN] = malloc(TOTAL * COMBO_LEN);
    int count = 0;

    while (count < TOTAL) {
        char new_combo[COMBO_LEN];
        generate_combo(new_combo);

        // 检查重复
        int duplicate = 0;
        for (int i = 0; i < count; i++) {
            if (strcmp(combos[i], new_combo) == 0) {
                duplicate = 1;
                break;
            }
        }

        if (!duplicate) {
            strcpy(combos[count], new_combo);
            printf("%s\n", new_combo); // 直接输出到命令行
            count++;
        }
    }

    free(combos);
    return 0;
}