计算所有不同偶数的子集

时间:2018-03-02 12:10:42

标签: c++

所以我有一个程序可以找到不同偶数的所有子集的计数,但我不断收到这个错误:“在'{'token'之前预期unqalified-id。 这是我的代码:

#include <iostream>
#include <bits/stdc++.h>

using namespace std;
{
        int countSubsets(int array[], int n)
        unordered_set<int> us;
        int even_count = 0;

    {
        for(int i=0; i<n; i++)
            if(array[i] % 2 == 0)
                us.insert(array[i]);

        unordered_set<int>:: iterator itr;
        for(itr=us.begin(); itr!=us.end(); itr++)
            even_count++;

        return(pow(2, even_count) - 1);
    }
    int main()
    {
        int array[] = {4, 2, 1, 9, 2, 6, 5, 3};
        int n = sizeof(array) / sizeof(array[0]);
        cout << "Number of subsets = "
            << countSubsets(array, n);
        return 0;
    }
}

有什么建议吗?

1 个答案:

答案 0 :(得分:1)

为什么你不应该使用#include <bits/stdc++.h>using namespace std;

您必须使用花括号{...}将函数体与边界对齐。在您的示例中,有两个函数:

int countSubsets(int array[], int n) {
    FUNCTION_BODY
}

int main() {
    FUNCTION_BODY
}

在您的情况下,没有必要在这些功能之外使用更多花括号。修复此错误后,请移除using namespace std;#include <bits/stdc++.h>

#include <iostream>
#include <unordered_set>
#include <cmath>

int countSubsets(int array[], int n) {
    std::unordered_set<int> us;
    int even_count = 0;

    for (int i = 0; i < n; i++)
        if (array[i] % 2 == 0) {
            us.insert(array[i]);
        }

    for (std::unordered_set<int>::iterator  itr = us.begin(); itr != us.end(); itr++)
        even_count++;

    return(std::pow(2, even_count) - 1);
}

int main() {
    int array[] = {4, 2, 1, 9, 2, 6, 5, 3};
    int n = sizeof(array) / sizeof(array[0]);
    std::cout << "Number of subsets = "
        << countSubsets(array, n);
    return 0;
}