如何检查数组是否包含多个元素?

时间:2019-09-18 17:32:17

标签: c++ arrays counting

我试图查看一个数组是否在数组中的任何给定索引处包含多个值,如果是,我希望它返回true,否则返回false。我希望它找到数字1-9时返回true,否则返回false。

 bool isSolved(int a[], int size) {
    int count = 0;
    for (int i = 1; i < 10; i++) {
        if (hasNum(a,size,i)) {
            count++;
        }
    }
    if (count == 9) {
        return true;
    }
    else { 
        return false;
    }
}

bool hasNum(int a[], int size, int num) {

    for (int i = 0; i < size; i++) {
        for (int j = 0; j < size; j++) {
            if (a[j] == num) {
                return true;
            }
            else {
                return false;
            }
        }
    }
}

这是我到目前为止所拥有的,只是卡住了而永无止境。

6 个答案:

答案 0 :(得分:2)

伙计,那是C ++。因此,请使用标准向量和标准库中的count_if函数:

#include <algorithm>
#include <vector>

std::vector<int> a { /* fill vector */ };
std::count_if(std::begin(a), std::end(a), [](auto const& x){ return x == 1;});

返回值为1的元素数。

也很好,请问1是否有值:

std::any_of(std::begin(a), std::end(a), [](auto const& x){ return x == 1;});

我知道这绝对不是答案...

答案 1 :(得分:1)

  

我正在尝试查看数组是否在数组中的任何给定索引处包含多个值

一个数组在每个索引中始终只包含一个值。

答案 2 :(得分:1)

hasNum函数中不需要两个for循环。另外,如果数组中的任何值都不等于传递的数字,则返回false。 for循环结束后,您需要返回false。

如下所示重写hasNum函数:

bool hasNum(int a[], int size, int num) {

    for (int i = 0; i < size; i++) {
        if (a[i] == num) {
            return true;
        }
    }
    return false;
}

答案 3 :(得分:0)

基本上,您的代码没有任何C ++准则。

首先,您没有在C ++中将数组传递为int a[]。请改用std::vector<int>

第二,您的算法效率很低。考虑使用直方图方法。

bool isSolved(const std::vector<int>& a)
{
     std::array<bool,10> hist;
     for(int i=0; i<10; i++)
     {
         hist[i]=false;
     }
     for(auto x : a)
     {
         if(x>=0 && x<10)
         {
              hist[x] = true;
         }
     }

     for(int i=0; i<10; i++)
     {
         if(!hist[i]) return false;
     }
     return true;
}

答案 4 :(得分:0)

以下是解决问题的提示:

class BinaryTreeSet : public BinarySearchTree {
    ...
    operator==
    ...
};

答案 5 :(得分:0)

最好使用像find_if这样的标准算法:

#include <algorithm>
int a[42]; // or vector<int> a(42) or any other container of any size
std::find_if(std::begin(a),std::end(a),[](auto const& v){return (v>=1)&&(v<=9);});