统计二维数组中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
相关产品推荐
相关产品推荐

