You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用C语言生成每行每列无重复1-9数的类数独棋盘?

C语言生成行列无重复的类数独棋盘

问题根源

数字重复是因为未对生成的随机数做行列去重校验;隐式声明、类型冲突错误,大多是自定义检查函数未提前声明,或函数返回值、参数类型与调用逻辑不匹配导致。

修正后的完整代码

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

// 提前声明检查函数,避免隐式声明错误
int isExist(int board[9][9], int row, int col, int num);

int main() {
    int board[9][9] = {0};
    int row, col, num;

    // 初始化随机数种子,保证每次运行生成不同棋盘
    srand(time(NULL));

    for (row = 0; row < 9; row++) {
        for (col = 0; col < 9; col++) {
            do {
                // 生成1-9的随机整数
                num = rand() % 9 + 1;
                // 检查当前行、列是否已存在该数字
            } while (isExist(board, row, col, num));
            // 确认无重复后填入对应位置
            board[row][col] = num;
        }
    }

    // 格式化打印棋盘,模拟3x3矩阵分组
    printf("生成的类数独棋盘:\n");
    for (row = 0; row < 9; row++) {
        for (col = 0; col < 9; col++) {
            printf("%d ", board[row][col]);
            if ((col + 1) % 3 == 0 && col != 8) {
                printf("| ");
            }
        }
        printf("\n");
        if ((row + 1) % 3 == 0 && row != 8) {
            printf("---------------------");
            printf("\n");
        }
    }

    return 0;
}

// 检查数字num是否在指定行或列中存在,存在返回1,不存在返回0
int isExist(int board[9][9], int row, int col, int num) {
    // 遍历当前行检查
    for (int c = 0; c < 9; c++) {
        if (board[row][c] == num) {
            return 1;
        }
    }
    // 遍历当前列检查
    for (int r = 0; r < 9; r++) {
        if (board[r][col] == num) {
            return 1;
        }
    }
    return 0;
}

核心问题解决说明

  • 隐式声明修复:在main函数前添加isExist函数的声明,让编译器提前知晓函数的参数类型和返回值类型,避免隐式声明引发的编译错误。
  • 类型冲突修复:确保isExist函数返回值为int(与do-while循环的判断逻辑匹配),参数中的二维数组类型与实际传入的board数组一致,避免类型不兼容问题。
  • 去重逻辑实现:使用do-while循环持续生成随机数,直到找到当前行和列中未出现过的数字,保证每行、每列的1-9数字无重复。
  • 随机数有效性:通过srand(time(NULL))基于系统时间初始化随机种子,避免每次运行生成完全相同的棋盘序列。

内容的提问来源于stack exchange,提问作者Misael Lim

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.07 03:25:56