奇安信 2020 年实习生招聘笔试编程题

一、买口罩

题目描述

小明有N元钱去药店买口罩,药店里有6个品牌的口罩,A品牌2个装(2元)、B品牌3个装(2元)、C品牌1个装(3元)、D品牌5个装(1元)、E品牌4个装(5元)、F品牌3个装(2元),由于限购每个品牌最多只能买一个,小明最多能买多少口罩?

思路分析

这是一个01背包问题,可以将上述六个品牌的口罩视为六种不同的物品。转换一下思维之后,小明的N元钱可以视为背包容量,每种物品的价格可以视为体积,装的口罩个数可以视为其价值。每种物品最多只能选一次,求最大价值。

AC代码(C++)

#include
#include

using namespace std;

int main()
{
    int v[] = {2, 2, 3, 1, 5, 2};  // 每件物品的体积
    int w[] = {2, 3, 1, 5, 4, 3};  // 每件物品的价值
    int dp[20] = {0};  // 1 < N < 15
    int N;
    cin >> N;
    for(int i = 0; i < 6; i ++)
    {
        for(int j = N; j >= v[i]; j --)
        {
            dp[j] = max(dp[j], dp[j - v[i]] + w[i]);
        }
    }
    cout << dp[N];
    return 0;
}

二、三角形的三边和

题目描述

三角形有三个边s1,s2,s3,边s1有四个圆圈⭕1,2,3,4,边s2有四个圆圈⭕4,5,6,7,边s3有四个圆圈⭕7,8,9,1。
把1-9这9个数字,分别填写到以上9个圆圈里,9个圆圈里的数字不能重复,对于每组输入,如果每条边上的4个圆圈⭕的和相等,输出"yes",否则输出"no"。

思路分析

只需要根据题意判断各条边上的数字和是否相等即可。这道题的输入是通过逗号分隔9个数字,因此需要特别处理输入。

AC代码(C++)

#include
#include
#include

using namespace std;

int main()
{
    string str;
    cin >> str;
    if(str[0] + str[2] + str[4] + str[6] == str[6] + str[8] + str[10] + str[12] && str[6] + str[8] + str[10] + str[12] == str[12] + str[14] + str[16] + str[0])
    {
        cout << "yes";
    }
    else
    {
        cout << "no";
    }
    return 0;
}

你可能感兴趣的:(C++)