c ++哪个列在2个dim数组中每行有1个

时间:2017-03-23 11:45:30

标签: c++ multidimensional-array

我有以下2个dim数组。我想找到每行有1个列的列。

因此,当我运行以下代码时,我希望看到:

0:02 1:13 3:01

但是我不明白。

有什么建议吗?

#define MAX_N 100

int myArray[4][4] = {
    { 1,0,0,1 },
    { 0,1,1,1 },
    { 1,0,1,0 },
    { 0,1,1,0 }
};

int main()
{
    int K[MAX_N] = { 0,1,3 };
    int B[MAX_N];
    for (int i = 0; i < 3; i++)
    {
        K[i];
        cout << K[i] << ": ";

        for (int x = 0; x < 4; x++)
        {
            int count = 0;
            for (int y = 0; y < 3; y++)
            {               
                // count = count +1;                
                if (myArray[x][y])
                    count = count + 1;

                if (count == K[i])
                {
                    B[x] = x; 
                    cout << B[x] << " ";
                }
            }
        }
    }

    system("pause");
    return 0;
}

如果我更改我的初始数组并将其设为:

    int myArray[4][4] = {
    { 1,1,0,1 },
    { 0,1,1,1 },
    { 1,0,1,0 },
    { 0,1,1,0 }
}; 

我会得到以下内容:

0: 02 1:013 3: 01  

有没有办法得到那些?换句话说,只获得0,因为当列等于K [i]时,只有0在行中是共同的。所以,结果将是:

 0:0 1:0 3:0

甚至只是

0

希望它有意义

2 个答案:

答案 0 :(得分:4)

我认为当列等于1时,您希望获取包含K[i]的行。

int main()
{
    int K[MAX_N] = { 0,1,3 };
    for (int i = 0; i < 3; i++)
    {
        cout << K[i] << ": ";

        for (int x = 0; x < 4; x++)
        {
            if (myArray[x][K[i]]) {
                cout << x;
            }
        }
        cout << " ";
    }

    system("pause");
    return 0;
}

对于第二个问题,请在break;之后添加cout << x;

答案 1 :(得分:0)

当您想要查看矩阵中的元素时,您只需要2个周期,而是创建一个用于打印行的新数组,您可以在for中打印索引。

int main()
{
  int count;
  for(int row = 0; row<4; row++){
    count = 0;
    for (int col = 0; col < 4; col++) {
      if(myArray[row][col] == 1)
        count++;
    }
    cout<<"row "<<row<<"has "<<count<<" 1s";
    }
    return 0;
}