查找多维数组中整数的出现次数(以C++为单位)

Finding the number of occurences of an integer in multidimensional array in C++

本文关键字:C++ 为单位 数组 整数 查找      更新时间:2023-10-16

我希望找到在以下逻辑定义的给定多维数组中作为输入的数字的出现次数:

...
int n,x,count=0;
cin>> n >> x;
int a[n][n]  ;
for(int i=1;i<=n;i++)
{
for(int j=1;j<=n;j++)
{
a[i][j]= i*j ;
}
}
for( int i=1;i<=n;i++)
{
for( int j=1;j<=n;j++)
{
if(a[i][j] == x)
++count;
}
}
cout<< count ;
...

例如,如果我输入为 6(n( 和 12(要找到它的出现次数,x这里(。多维数组如下所示:

1  2  3  4  5  6  
2  4  6  8 10 12  
3  6  9 12 15 18  
4  8 12 16 20 24  
5 10 15 20 25 30  
6 12 18 24 30 36  

现在,这里 12 的出现次数是 4(计数(。 但是当我给n10 和x5 时,程序停止工作。我似乎找不到正在发生的事情。有人可以帮助我吗? 另外,我可以通过什么方式修改我的代码? 如何在不改变程序逻辑的情况下处理n大到 1000 或 10k 的情况?

C/C++ 中的索引从0开始。如果一个数组被声明为具有大小nint a[n],则唯一有效的索引是:0,1,...,n-1[0,n[

如果你越界了,未定义的行为是意料之中的。应该是你的情况。

按如下方式修复循环(请注意新边界和ij中的+1(

int a[n][n];
for(int i=0;i<n;i++)
for(int j=0;j<n;j++)
a[i][j]= (i+1)*(j+1) ;
#include <algorithm>
// ...
for(int i = 0; i < n; ++i) {
count += std::count(a[i], a[i] + n, x);
}

或更简单的版本:

std::cout << std::count(a[0], a[0] + n*n, x);