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

统计二维数组中1-9数字出现次数的C++实现(禁用高级容器)

统计二维数组中1-9数字出现次数的问题解决

嘿,我看到你正在解决统计二维数组里1到9每个数字出现次数的问题,还要求不能用map、vector这类高级容器对吧?先看看你写的代码片段,我来帮你补全并修正里面的问题~

你的代码片段

#include <iostream>
using namespace std;
int main() {
    //declare numbers array
    int numbers[5][3] = {{1, 2, 7}, {2, 5, 3}, {1, 9, 4}, {2, 6, 5}, {7, 2, 2}};
    //declare counts array
    int counts[9];
    //declare variable
    int digit = 0;
    //keeps track of numbers from 1 through 9
    while (digit <= 9) {
        for (int row = 0; row &...

代码里的几个问题

  • counts数组没有初始化,里面会是随机垃圾值,直接用来统计肯定会出错
  • while (digit <=9)的条件有问题:counts是长度为9的数组,索引范围是0-8,当digit到9时,访问counts[9]会直接越界
  • 用while循环逐个数字去遍历数组统计的方式比较繁琐,其实可以直接遍历二维数组的每个元素,实时更新对应数字的计数,效率更高

修正后的完整代码

#include <iostream>
using namespace std;

int main() {
    // 定义目标二维数组
    int numbers[5][3] = {{1, 2, 7}, {2, 5, 3}, {1, 9, 4}, {2, 6, 5}, {7, 2, 2}};
    // 定义计数数组:索引0对应数字1,索引8对应数字9,初始化为全0
    int counts[9] = {0}; 

    // 遍历二维数组的每一行
    for (int row = 0; row < 5; row++) {
        // 遍历当前行的每一列
        for (int col = 0; col < 3; col++) {
            int current_num = numbers[row][col];
            // 可选的安全检查:确保当前数字在1-9范围内
            if (current_num >= 1 && current_num <= 9) {
                // 数字减1得到对应的计数数组索引,计数加1
                counts[current_num - 1]++;
            }
        }
    }

    // 输出统计结果
    cout << "数字1-9的出现次数统计:" << endl;
    for (int i = 0; i < 9; i++) {
        cout << "数字" << (i + 1) << ": " << counts[i] << "次" << endl;
    }

    return 0;
}

关键步骤说明

  • 初始化计数数组:int counts[9] = {0}; 这一步很重要,能确保所有数字的初始计数都是0,避免随机值影响结果
  • 遍历二维数组:用嵌套for循环逐个访问数组里的每个元素,外层循环处理行,内层处理列
  • 更新计数:因为我们要统计的数字是1-9,而数组索引从0开始,所以用current_num - 1就能得到对应的计数位置,直接给该位置加1即可
  • 输出结果:最后遍历计数数组,i + 1就是对应的数字,counts[i]就是该数字的出现次数

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.20 11:27:12