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

C++生成100x100正奇数随机矩阵却输出0和负数的问题

问题排查与解决:生成正奇数100x100随机矩阵错误

问题原因

  • 循环逻辑完全错误:原代码仅在生成奇数时同时递增行索引i和列索引j,最终仅会填充矩阵的对角线元素(matrix[0][0]到matrix[99][99]),其余9900个元素未初始化,输出的是栈内存中的随机垃圾值(包括0、负数等)。
  • 冗余判断:random > 0毫无意义,因为1 + rand()%100的结果必然在1-100之间,不可能小于等于0。

解决方法

需要遍历矩阵的每一个元素,为每个元素生成正奇数。可以直接构造奇数随机数,避免无效的循环判断:

修正后的代码

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

using namespace std;

int main()
{
    int matrix[100][100];

    srand(time(NULL));

    // 遍历矩阵的每一行
    for (int i = 0; i < 100; i++)
    {
        // 遍历当前行的每一列
        for (int j = 0; j < 100; j++)
        {
            // 直接生成1-99之间的正奇数
            // rand()%50 得到0-49,乘2得0-98,加1得1-99的奇数
            matrix[i][j] = (rand() % 50) * 2 + 1;
        }
    }

    // 输出矩阵
    for (int i = 0; i < 100; i++)
    {
        for (int j = 0; j < 100; j++)
        {
            cout << matrix[i][j] << " ";
        }
        cout << "\n";
    }

    return 0;
}

代码说明

  • 采用嵌套循环正常遍历矩阵的每一个元素,确保所有10000个位置都被赋值。
  • 直接构造奇数:(rand() % 50) * 2 + 1 生成1到99之间的正奇数,无需额外判断,效率更高。
  • 如果需要更大范围的正奇数,可调整公式,比如生成1到199的奇数:(rand() % 100) * 2 + 1。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.24 03:25:03