如何运行包含3个值的2D数组并运行检查值?

时间:2011-04-23 22:03:41

标签: c++ visual-c++ objective-c++

好的,所以我真的觉得我在想这个,但我已经连续48小时编程,我的思绪已经消失了。背景信息:使用Visual Studio 2010,使用C ++创建控制台应用程序。我遇到了一些逻辑问题,并陷入了以下困境:

我有一个2维8 x 8阵列,矩阵[8] [8]。该数组包含0,1和2。现在,当程序执行时,数组将1或2替换为0。因此,当它运行时,我想检查数组是否已删除所有的1或2。因此,如果只有0和1,我想传达一条消息,说“你的数组不再包含2个”,反之亦然,如果只有0和2的话。

以下是我正在考虑使用的一些代码:

for(row = 0; row < 8; row++)
{
    for (col = 0; col < 8; col++)
    {
        if(matrix[row][col] != 1){
            cout<<"message"<<endl; }

        else if(matrix[row][col] != 2){
            cout<<"message"<<endl; }
    }
}

现在我的问题是,如果数组包含[0,1,2,0],它将运行并检查第一个元素,它不会包含1或2.有关我能做什么的一些想法好吗?

4 个答案:

答案 0 :(得分:1)

你不能在循环内决定。您只能在完成整个矩阵后知道结果:

bool hasOnes = false;
bool hasTwos = false;
for(row = 0; row < 8; row++)
{
    for (col = 0; col < 8; col++)
    {
        if(matrix[row][col] == 1) {
          hasOnes = true;
        } else if(matrix[row][col] == 2){
          hasTwos = true;
        }
}

if (hasOnes && !hasTwos)
  cout << "You have removed twos" << endl;
if (hasTwos && !hasOnes)
  cout << "You have removed ones" << endl;

答案 1 :(得分:0)

我建议你迭代矩阵并计算所有这些元素:

int counts[3];
for(i = 0; i < 3; i++)
{
    counts[i] = 0;
}
for(row = 0; row < 8; row++)
{
    for (col = 0; col < 8; col++)
    {
        counts[matrix[row][col]]++;
    }
}

完成此操作后,您只需检查counts[1]即可查看矩阵中的数量。此外,如果您迭代地替换值,则可以避免在每次迭代后重新检查完整矩阵。您可以在更改矩阵时更改计数。

答案 2 :(得分:0)

假设你在每个数组元素中都有0-2:     int vals = 0;     for(int row = 0; row&lt; 8; row ++)         for(int col = 0; col&lt; 8; col ++)         {             vals | = matrix [row] [col];             if(vals == 3)                  打破;         }     if(vals&amp; 1)cout&lt;&lt; “Matrix包含1个”&lt;&lt; ENDL;     if(vals&amp; 2)cout&lt;&lt; “Matrix包含2个”&lt;&lt; ENDL;

答案 3 :(得分:0)

int count[3] = {0,0,0};
for (int i = 0; i < 64; i++) count[*(matrix + i)]++;

if (count[0] + count[1] == 64) cout<<"No 2s exist"<<endl;
if (count[0] + count[2] == 64) cout<<"No 1s exist"<<endl;

修改
这可能会稍快一点

int count[3] = {0,0,0};
for (int i = 0; i < 64; i++) 
     if (!count[1] && !count[2]) count[*(matrix + i)]++;
     else break;

if (count[0] + count[1] == 64) cout<<"No 2s exist"<<endl;
if (count[0] + count[2] == 64) cout<<"No 1s exist"<<endl;