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

C++三维数组问题:元素仅显示0,需生成0-9随机数并查目标次数

问题解决:3×3×3三维随机数组生成及查找功能修复

问题描述

需要用C++实现以下功能:

  • 创建3×3×3的三维数组
  • 用0-9的随机数填充数组
  • 实现查找目标值及其出现次数的功能
    但当前运行代码时,数组元素仅显示0,无法得到预期的随机数。

错误原因分析

  1. 数组初始化方式错误:int nums[a][a][a] = { rand() % 10 }; 这种写法只会给数组的第一个元素nums[0][0][0]赋值,剩下的所有元素都会被默认初始化为0,并没有遍历所有元素生成随机数。
  2. 未设置随机数种子:直接使用rand()会默认以固定值1作为种子,每次运行生成的随机序列完全相同,而且这里根本没给大部分元素赋值,导致数组全是0。
  3. 缺少必要头文件:代码中使用了setw()格式化输出,但没有包含<iomanip>头文件,会导致编译错误或格式失效。
  4. 冗余代码:int array = sizeof(nums); 这行代码没有任何实际作用,sizeof(nums)得到的是整个数组的字节数,不是元素个数,完全可以删除。

修正后的完整代码

#include <iostream>
#include <stdlib.h>
#include <time.h>
#include <iomanip>  // 新增:用于setw格式化输出

using namespace std;

int count_occurrences(int array[3][3][3], int size, int target)
{
    int result = 0;
    for (int i = 0; i < size; ++i) {
        for (int j = 0; j < size; ++j) {
            for (int k = 0; k < size; ++k) {
                if (target == array[i][j][k])
                    result++;
            }
        }
    }
    return result;
}

int main()
{
    int b;
    const int a = 3;
    int nums[a][a][a];

    // 设置随机数种子,确保每次运行生成不同的随机序列
    srand(time(0));

    // 三重循环遍历数组,给每个元素赋值0-9的随机数
    for (int i = 0; i < a; ++i) {
        for (int j = 0; j < a; ++j) {
            for (int k = 0; k < a; ++k) {
                nums[i][j][k] = rand() % 10;
            }
        }
    }

    cout << "===================================================================================" << endl;
    cout << "==========================DISPLAYING 3X3X3 ARRAY ELEMENTS==========================" << endl;
    for (int i = 0; i < a; ++i) {
        for (int j = 0; j < a; ++j) {
            for (int k = 0; k < a; ++k) {
                cout << setw(10) << "[   array[" << i << "][" << j << "][" << k << "] = " << nums[i][j][k] << "   ]" << "  ";
            }
            cout << endl;
        }
    }
    cout << endl << endl << endl;

    cout << "Please enter a target value : ";
    cin >> b;
    cout << "The number of occurrences of " << b << " : " << count_occurrences(nums, a, b) << " times";

    return 0;
}

关键修复说明

  • 添加随机数种子:srand(time(0)); 以当前时间作为随机数种子,保证每次运行程序生成的随机数序列都不一样。
  • 遍历赋值随机数:用三重循环逐个给数组的每个元素赋值rand() % 10,确保所有元素都是0-9的随机数。
  • 补充必要头文件:加入<iomanip>头文件,让setw()正常工作,保证输出格式整齐。
  • 删除冗余代码:去掉无用的int array = sizeof(nums);语句,简化代码。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.21 05:27:26