【问题标题】:How to check if all the values of an array are equal to 0?如何检查数组的所有值是否都等于0?
【发布时间】:2015-11-13 15:36:28
【问题描述】:

程序的上下文是一个涉及钉子和圆盘的游戏。用户输入钉子的数量(最多 20 个)和每个钉子上的圆盘数量(最多 10 个)。考虑到有足够的圆盘可以移出该圆盘,两名玩家每回合来回移除单个圆盘上的任意数量的圆盘。取出最后一张光盘的玩家输了。

光盘的数量存储在一个数组中,其中数组的索引对应于 peg 编号。我有一个布尔函数,可以检查钉子是否没有光盘,这意味着有人赢了。我的代码中有一些逻辑错误,但我无法弄清楚它是什么:

bool checkPegs(int array[], int size)
{
  int checker(0);
  for (int i = 0; i < size; i++)
  {
      if(array[i] = 0)
      {
        return true;
      }
      else
      {
        return false;
      }
  }
}

【问题讨论】:

标签: c++ arrays


【解决方案1】:
bool checkPegs(int array[], int size)
{
  for (int i = 0; i < size; i++)
  {
      if(array[i] != 0)
      {
        return false;
      }
  }
  return true;
}

【讨论】:

  • 这不会检查数组中的最后一个元素。
  • 它不是 char 数组。
  • @TartanLlama 已修复,尽管我迟到了将近一年。
【解决方案2】:

尝试使用 memcmp 而不是使用 for 循环单独的函数:

int zeros[sizeof(yourArray)];
if(memcmp(yourArray,zeros,sizeof(yourArray))==0)
//do things
else
//do things

【讨论】:

    【解决方案3】:
    if(array[i] = 0)
    

    这不会将array[i]0 进行比较,它 0 分配给array[i]。你想要array[i] == 0

    if(array[i] == 0)
    {
        return true;
    }
    else
    {
        return false;
    }
    

    第二个问题是你只检查第一个元素,然后根据它返回。您应该检查每个元素以确保它们不为零:

    for (int i = 0; i < size; i++)
    {
        if(array[i] != 0) {
            return false;
        }
    }
    

    最后,您不处理size0 的情况。在这种情况下,您应该返回true

    bool checkPegs(int array[], int size)
    {
        for (int i = 0; i < size; i++)
        {
            if(array[i] != 0) {
                return false;
            }
        }
    
        return true;
    }
    

    【讨论】:

      【解决方案4】:

      这里有两个错误

      bool checkPegs(int array[], int size)
      {
        int checker(0);
        for (int i = 0; i < size; i++)
        {
            if(array[i] = 0) // the first one use '==' instead of '='
            {
              return true; // the second one, you are testing the first element only
            }
            else
            {
              return false;
            }
        }
      }
      

      应该是这样的

      bool checkPegs(int array[], int size)
      {
      
        for (int i = 0; i < size; i++)
        {
            if(array[i] )
                return false; // return false at the first found
      
        }
        return true; //all elements checked
      }
      

      【讨论】:

        【解决方案5】:

        您编写代码的方式行不通,因为您实际上只考虑第一个元素,因为if/else 中有两个return 语句。此外,您使用赋值语句而不是比较。

        它遵循一个经过审查的示例:

        bool checkPegs(int *array, int size) {
            for (int i = 0; i < size; i++) {
                if(array[i] != 0) { return false; }
            }
            return true;
        }
        

        请记住,它可以进行优化,您也可以使用标准实用程序来做同样的事情,但我假设您正在学习编码,因此值得自己编写。

        【讨论】:

          猜你喜欢
          • 2013-01-27
          • 1970-01-01
          • 1970-01-01
          • 2021-01-07
          • 2021-05-27
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2015-04-12
          相关资源
          最近更新 更多