48天笔试强训——第16天

132 阅读1分钟

持续创作,加速成长!这是我参与「掘金日新计划 · 10 月更文挑战」的第28天,点击查看活动详情


选择题

image.png

image.png

image.png

image.png

image.png

image.png

image.png

image.png

image.png

image.png

编程题

完全数计算

这一题我们可以暴力枚举,就是把它题目中描述的该数的约数找出来求和,然后和该数的值进行比较。

#include <iostream>
#include <math.h>
using namespace std;
bool f(int n)
{
    int sum=0;
    for(int i=1;i<n;++i)
    {
        if(n%i==0)
        sum+=i;
    }
    return sum==n;
}
int main() {
    int n,sum;
    sum=0;
    cin>>n;
    for(int i=6;i<=n;++i)
    {
        if(f(i))
        sum++;
    }
    cout<<sum<<endl;
}

扑克牌大小

首先我们要把牌分开,如果牌里面有大小王,结果直接是大小王,然后我们需要计算牌的个数,当牌的个数相等的时候,说明是同一种类型的牌,这样我们只需要判断第一张牌的大小就可以判断,谁大谁小,当牌数不相同的时候,说明其中一个肯定是炸弹,或者是牌不能比较大小,只需要再分别出这两种牌就可以了。

#include <iostream>
#include <string>
#include <algorithm>
using namespace std;

void Separate(string& str, string& left, string& right) {
    int pos = str.find('-');
    left = str.substr(0, pos);
    right = str.substr(pos + 1);
}
int main() {
    string str, left, right;
    getline(cin, str);
    Separate(str, left, right);
    if(str.find("joker JOKER")!=string::npos)
    {
        cout<<"joker JOKER"<<endl;
        return 0;
    }
    int left_sum = count(left.begin(), left.end(), ' ')+1;
    int right_sum = count(right.begin(), right.end(), ' ')+1;
    if (left_sum == right_sum) {
        string str = "345678910JQKA2jokerJOKER";
        string left_str = left.substr(0, left.find(' '));
        string right_str = right.substr(0, right.find(' '));
        cout << (str.find(left_str) < str.find(right_str) ? right : left) << endl;
    }
    else
    {
        if (left_sum == 4)
        cout << left << endl;
        else if (right_sum == 4)
        cout << right << endl;
        else
        cout<<"ERROR"<<endl;
    }
    return 0;
}