我希望找到在下面的逻辑定义的给定多维数组中作为输入的数字的出现次数:
...
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(计数)。
但是当我将n
设为10并将x
设为5时,程序将停止工作。我似乎无法找到正在发生的事情。有人可以帮我吗?
我还能以什么方式修改我的代码?
如果n
大到1000或10k而不改变程序的逻辑,我该如何处理这种情况呢?
答案 0 :(得分:3)
C / C ++中的索引从0
开始。如果声明数组的大小为n
,则int a[n]
中的唯一有效索引为:0,1,...,n-1
,即[0,n[
如果你超出了未定义的行为是预期的。那应该是你的情况。
按如下方式修复循环(请注意新界限以及+1
和i
中的j
)
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) ;
答案 1 :(得分:0)
#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);