【问题标题】:Finding the number of occurences of an integer in multidimensional array in C++在 C++ 中查找多维数组中整数的出现次数
【发布时间】:2017-07-13 09:18:46
【问题描述】:

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

...
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 的情况如何处理而不改变程序的逻辑?

【问题讨论】:

  • 请提供minimal reproducible example。您不会显示包含错误的代码,而只会显示如何填充数组
  • 你只显示了一半的代码,在哪里找到数字代码?
  • 我现在已经编辑过了。谢谢。
  • int a[n][n] ; -- 这不是有效的 C++。 C++ 中的数组不能使用变量来表示条目的数量。

标签: c++ c++11 multidimensional-array


【解决方案1】:

C/C++ 中的索引从 0 开始。如果数组的大小被声明为n,如int 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) ;

【讨论】:

  • 如果我用零初始化它,第一行和第一列将是零。
  • @The_sinner 然后使用a[i][j]=(i+1)*(j+1)。请参阅编辑后的答案。
  • 谢谢。工作。 @大卫斯帕塔罗
  • 该数组不是 C++ 中的有效数组。
  • @PaulMcKenzie 为什么不是?因为n 不是const
【解决方案2】:
#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);

【讨论】:

  • 再说明:变量'a'被声明了两次。请更正。
  • 完成。谢谢
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-09-23
  • 1970-01-01
  • 1970-01-01
  • 2013-06-22
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多