CSDN周赛第十二期

CSDN的比赛难度相对而且比较简单,适合小白练手,而且刷题本身在于锻炼思维,写出题目不难,但是需要拥有缜密的思维才能通过全部的用例。

1、豚鼠排名榜

已知字符A.B,C。每个字符都有自己的权值q。 现不知道权值q,只知道A,B,C的三次比较结果。

#include <iostream>
#include <string>
#include <vector>
#include <unordered_map>
using namespace std;
std::string solution(std::string exp1, std::string exp2, std::string exp3){
std::string result;
vector<string> strs = {{"ABC"}, {"ACB"}, {"BAC"}, {"BCA"}, {"CAB"}, {"CBA"}};
for(string str : strs) {
unordered_map<char, int> um;
for(int i = 0; i < str.size(); ++i) {
um[str[i]] = i;
}
bool flag = false;
if(exp1[1] == '>') {
flag = um[exp1[0]] > um[exp1[2]];
} else {
flag = um[exp1[2]] > um[exp1[0]];
}
if(flag == true) {
if(exp2[1] == '>') {
flag = um[exp2[0]] > um[exp2[2]];
} else {
flag = um[exp2[2]] > um[exp2[0]];
}
}
if(flag == true) {
if(exp3[1] == '>') {
flag = um[exp3[0]] > um[exp3[2]];
} else {
flag = um[exp3[2]] > um[exp3[0]];
}
}
if(flag == true) {
return str;
}
}
return "Impossible";
}
int main() {
std::string exp1;
std::string exp2;
std::string exp3;
std::cin>>exp1;
std::cin>>exp2;
std::cin>>exp3;
std::string result = solution(exp1, exp2, exp3);
std::cout<<result<<std::endl;
return 0;
}

2、字符串转换

已知一个字符串a,b。 字符串b中包含数量不等的特殊符号“.”,“*”(字符串存在没有特殊符号或者全由特殊符号组成的情 况)。 “.”表示该字符可以变成任意字符,“* ”表示该字符的前一个字符可以变成任意多个。 现在我们想知道b可否通过特 殊符号变成a。 a* 可以转化为a,aa,aaa,aaaa…

#include <iostream>
#include <string>
using namespace std;
std::string solution(std::string a, std::string b){
std::string result;
int len_1 = a.size(), len_2 = b.size();
int idx_1 = 0, idx_2 = 0;
while(idx_1 < len_1 && idx_2 < len_2) {
if(a[idx_1] == b[idx_2]) {
++idx_1;
++idx_2;
} else if(b[idx_2] == '*') {
if(idx_1 > 0 && a[idx_1] != a[idx_1 - 1] && idx_1 < len_1) {
return "no";
}
while(idx_1 > 0 && a[idx_1] == a[idx_1 - 1] && idx_1 < len_1) {
++idx_1;
}
++idx_2;
} else if(b[idx_2] == '.') {
++idx_1;
++idx_2;
} else {
return "no";
}
}
if(idx_1 != len_1 || idx_2 != len_2) {
return "no";
}
result = "yes";
return result;
}
int main() {
std::string a;
std::string b;
std::cin>>a;
std::cin>>b;
std::string result = solution(a, b);
std::cout<<result<<std::endl;
return 0;
}

3、题目名称:蚂蚁家族

小蚂蚁群是一个庞大的群体,在这个蚂蚁群中有n只小蚂蚁 ,为了保证所有蚂蚁在消息传送的时候都能接收到消息,需要 在他们之间建立通信关系。就是要求小蚂蚁都可以通过多只或者直接联系到其他人。 已知几条小蚂蚁之间有通信关系,请 问还需要再新建至少多少条关系?

#include <stdio.h>
#include <stdlib.h>
int solution(int m, int n, int (*arr)[]){
int result;
result=0;
// TODO: 请在此编写代码
if(m==1)
return 0;
if(n>m-1)
return 0;
result=m-1-n;
return result;
}
int main() {
int n;
int m;
scanf("%d", &n);
scanf("%d", &m);
int (*arr)[2];
arr = (int (*)[2])malloc(m * sizeof(int*));
for (int i = 0; i < m; i++)
{
scanf("%d %d", &arr[i][0], &arr[i][1]);
}
int result = solution(n, m, arr);
printf("%d", result);
return 0;
}

4、题目名称:小股炒股

已知n天后的股票行情,现在已有的本金是m, 规定只能入手一次股票和抛售一次股票。 最大收益(含本金)是?

#include <iostream>
#include <string>
#include <sstream>
#include <vector>
#include <algorithm>
#include <climits>
using namespace std;
int solution(int n, int m, std::vector<int>& vec){
int result=0;
int preMin=INT_MAX;
for(int i=0;i<n;i++){
result=max(result,(m/preMin)*(vec[i]-preMin));
if(m>=vec[i]){
preMin=min(preMin,vec[i]);
}
}
if(result==0)
return m;
result+=m;
return result;
}
int main() {
int n;
int m;
std::vector<int> vec;
std::cin>>n;
std::cin>>m;
std::string line_0, token_0;
getline(std::cin >> std::ws,line_0);
std::stringstream tokens_0(line_0);
while(std::getline(tokens_0, token_0, ' ')){
vec.push_back(std::stoi(token_0));
}
int result = solution(n, m,vec);
std::cout<<result<<std::endl;
return 0;
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

身在江湖的郭大侠

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值