C语言如何在9×9的0-1矩阵中放置最多10个随机的1?
你当前的代码对每个位置独立生成随机0/1,无法控制1的总数量,通常运行后1的数量会在40个左右,远高于要求的最多10个。
实现思路
- 先初始化一个全为0的9×9二维数组
- 随机生成行列坐标,最多往数组中10个不重复的位置放置1
- 遍历数组打印最终矩阵
完整可运行代码
#include <stdio.h> #include <stdlib.h> #include <time.h> int main() { // 初始化全0的9*9矩阵 int matrix[9][9] = {0}; int count = 0; // 设置随机种子,保证每次运行结果不同 srand(time(NULL)); // 如果需要1的数量是0~10随机,可加下行代码,把循环条件里的10换成target // int target = rand() % 11; // 放置10个1,若要最多10个随机数量替换10为上面的target即可 while (count < 10) { // 随机生成0~8范围的行号和列号 int row = rand() % 9; int col = rand() % 9; // 仅当前位置为0时放置1,避免重复计数 if (matrix[row][col] == 0) { matrix[row][col] = 1; count++; } } // 打印矩阵 for (int i = 0; i < 9; ++i) { for (int j = 0; j < 9; ++j) { printf("%d ", matrix[i][j]); } printf("\n"); } return 0; }
关键说明
- 初始化数组时写
int matrix[9][9] = {0}即可让所有元素默认初始化为0,不需要额外循环赋值 - 放置1前先判断对应位置是否为0,避免同一个位置被多次计数,保证1的数量符合要求
srand(time(NULL))仅需在程序开头调用一次即可,不要放在循环内,否则会导致随机结果重复
内容的提问来源于stack exchange,提问作者Jordi Bacardit
相关产品推荐
相关产品推荐

