我试图查看一个数组是否在数组中的任何给定索引处包含多个值,如果是,我希望它返回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;
}
}
}
}
这是我到目前为止所拥有的,只是卡住了而永无止境。
答案 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);});