持续创作,加速成长!这是我参与「掘金日新计划 · 10 月更文挑战」的第28天,点击查看活动详情
选择题
编程题
这一题我们可以暴力枚举,就是把它题目中描述的该数的约数找出来求和,然后和该数的值进行比较。
#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;
}