2018小米秋招笔试题-24点

题目描述

链接:https://www.nowcoder.com/questionTerminal/263fa05acac5424a91214694a1c1eb8f

有n个1~23的整数,写一个算法,求出有多少个相互不同的子集合的和为24点。

  • 输入描述:

输入数据包含一组
每组的第一行包括一个整数n(1 <= n <= 23)
第二行包括n个整数1 <= 整数 <= 23)

  • 输出描述:

对于每个测试实例,要求输出能组成24点的所有子集合的数量(子集合相互不同)。如果不存在,则输出0。每个测试实例的输出占一行。

示例1

  • 输入

4
1 2 22 23

  • 输出

2

参考代码

#include <iostream>
#include <set>
using namespace std;
set<set<int>> res;

int GetSum2(int a[], int n, bool visited[])
{
    int num = 0;
    for (size_t i = 0; i < n; i++)
    {
        if (visited[i])
            num += a[i];
    }
    return num;
}

void Print2(int a[], int n, bool visited[])
{
    set<int> tmp;
    for (size_t i = 0; i < n; i++)
    {
        if (visited[i])
            tmp.insert(a[i]);
    }
    res.insert(tmp);
}

void GetSubSet2(int a[], int n, int m, int begin, bool visited[])
{
    if (begin == n)
    {
        if (GetSum2(a, n, visited) == m)
        {
            Print2(a, n, visited);
        }
        return;
    }
    visited[begin] = true;
    GetSubSet2(a, n, m, begin + 1, visited);
    visited[begin] = false;
    GetSubSet2(a, n, m, begin + 1, visited);
}

int main(int argc, char const *argv[])
{
    int n;
    cin >> n;
    int *a = new int[n];
    bool *visited = new bool[n];
    for(int i = 0;i < n;i++){
        cin >> a[i];
        visited[i] = false;
    }
    GetSubSet2(a, n, 24, 0, visited);
    cout << res.size() <<endl;
    return 0;
}

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
很抱歉,我无法提供南方电网秋招笔试真的具体内容,因为我无法获取或提供特定公司的招聘信息。但是,我可以给你一些关于南方电网秋招笔试的一般性建议和常见型。 南方电网秋招笔试通常包括以下几个方面的内容: 1. 专业知识测试:涉及电力工程、电气工程、能源与动力工程等相关专业知识,包括电力系统、电力设备、电力工程管理等方面的知识。 2. 数学与逻辑推理:包括数学运算、概率统计、逻辑推理等方面的目。 3. 英语能力测试:主要考察英语阅读理解、词汇量和语法等方面的能力。 4. 综合素质测试:主要考察应聘者的综合素质,包括综合分析能力、创新思维、团队合作等方面。 在备考南方电网秋招笔试时,建议你注意以下几点: 1. 熟悉岗位要求:了解南方电网对应聘者的要求,明确自己所应聘的岗位所需的专业知识和技能。 2. 多做模拟:通过做一些模拟来熟悉型和考试时间,提高解速度和准确性。 3. 复习重点知识:重点复习与岗位相关的专业知识,包括电力系统、电力设备、电力工程管理等方面的知识。 4. 提高英语能力:加强英语阅读理解和词汇量的积累,可以通过阅读英文文章、做和听力练习等方式提高英语能力。 5. 注重综合素质:在备考过程中,注重培养自己的综合素质,包括综合分析能力、创新思维和团队合作等方面的能力。 希望以上建议对你有所帮助!

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值