2023短学期0912题解

使用find()寻找ABBA

【C系列6.21】字符串训练之AB串

Description

无聊的wxa又开始玩字符串了,现在他有一个字符串s,他想知道这个字符串是否含有非重叠AB和BA。(如ABA里AB和BA是重叠的,而ABBA里AB和BA是不重叠的)

Input

输入数据有多组。

每组测试数据有一个字符串s。

Output

如果可以找到AB和BA,输出”yu ye sa wang dai xing”,否则输出”zhen shi ou ba”

Samples

input

ABA

output

zhen shi ou ba

Solution

#include<bits/stdc++.h>
using namespace std;
int main() {
string s;
while (cin >> s) {
int pos1 = s.find("AB");
int pos2 = s.find("BA", pos1 + 2);
int pos3 = s.find("BA");
int pos4 = s.find("AB", pos3 + 2);
if ((pos1 != -1 && pos2 != -1) || (pos3 != -1 && pos4 != -1)) {
cout << "yu ye sa wang dai xing" << endl;
}
else {
cout << "zhen shi ou ba" << endl;
}
}
return 0;
}

结构体简单练习

期末排名

Description

自古以来,期末成绩排名一直困扰着人类社会。现在给出N个人的姓名、理论考成绩以及实践考成绩。总分等于理论考和实践考成绩之和,请按照总分排序并输出。题目保证分数均为正整数,两两之间总分互不相同。

Input

第一行一个整数T,表示T组数据。(0<T<100)

每组测试数据第一行为一个整数N代表接下来有N条数据(0<N<100)。
接下来N行,每行给出一个英文名字(长度小于30),以及这个名字对应的理论成绩与实践成绩(均为正整数)。

Output

请输出排序后的姓名列表。

Samples

input

1
3
YYY 10 10
AAA 1 1
SSS 3 3

output

YYY
SSS
AAA

Solution

#include<bits/stdc++.h>
using namespace std;
struct stu {
string name;
int a;
int b;
int total;//保存总分
};
bool cmp(const struct stu& x, const struct stu& y) {
return x.total > y.total;//按照总分降序排序
}
int main(){
int t;
cin >> t;
while (t--) {
int n;
cin >> n;
struct stu grade[100];
for (int i = 0; i < n; i++) {
cin >> grade[i].name >> grade[i].a >> grade[i].b;
grade[i].total = grade[i].a + grade[i].b;
}
sort(grade, grade + n, cmp);
for (int i = 0; i < n; i++) {
cout << grade[i].name << endl;
}
}
return 0;
}

字符和数字的转换

凯撒密码

Description

李先森最近迷上了密码学,决定洗心革面好好学习。今天,他学习了最简单的加密方法——凯撒加密,突发奇想想要来考考你们。他自己制定了这样一个加密规则:大写字母偏移量为3,小写字母偏移量为13。他会给你一串大小写混杂的字符串,你能为他加密吗。

Input

有多组输入,每行为一组,当输入一行为“!"时输入结束。字符串长度不超过50,且均为字母。

Output

输出加密结果。

Samples

input

abc
!

output

nop

Hint

凯撒密码作为一种最为古老的对称加密体制,在古罗马的时候都已经很流行,他的基本思想是:通过把字母移动一定的位数来实现加密和解密。明文中的所有字母都在字母表上向后(或向前)按照一个固定数目进行偏移后被替换成密文。例如,当偏移量是3的时候,所有的字母A将被替换成D,B变成E,以此类推X将变成A,Y变成B,Z变成C。由此可见,位数就是凯撒密码加密和解密的密钥。

博客题解:https://blog.csdn.net/qq_49006646/article/details/107031160

“%26”可以确保大小写字母不会超出各自范围

#include<bits/stdc++.h>
using namespace std;
string caesarCipher(string str) {
for (char& c : str) {
if (isupper(c)) {
c = 'A' + (c - 'A' + 3) % 26; // 大写字母偏移量为3
}
else if (islower(c)) {
c = 'a' + (c - 'a' + 13) % 26; // 小写字母偏移量为13
}
}
return str;
}
int main() {
string input;
while (true) {
cin >> input;
if (input == "!") {
break;
}
string encrypted = caesarCipher(input);
cout << encrypted << endl;
}
return 0;
}

难以捉摸的detail

统计疫情人数

Description

疫情爆发之后,全球各地都广受其影响。歪比巴卜小镇也被疫情所波及,小镇需要统计当前时刻现有病例的人数。现在有一份现有病例的人数的数据(数据可能是伪造的),需要你设计程序来统计现有病例的人数。

Input

数据的第一行为n,m(n<=1e6, 1<=m<=1e6)。n表示开始统计的初始时刻现有病例的人数,m表示接下来有m次操作。
接下来m行会有3种可能存在的操作类型:
1、Add x 表示现有病例的人数增加了x人。( 0<=x<=1e9 )

2、Sub x 表示现有病例的人数减少了x人。( 0<=x<=1e9 )

3、Query 表示一次查询现有病例的人数的操作,你将需要输出此时的现有病例的人数。

Output

在每次查询操作后,你需要输出此时的现有病例的人数。
注意:现有病例的人数不可能小于零,当你发现这种情况时,说明这是一份伪造的数据,你需要在之后所有的查询之后都输出“fake news!”。

Samples

input

100 2
Add 100
Query

output

200

input

100 4
Add 50
Query
Sub 30
Query

output

150
120

input

100 6
Sub 1
Query
Sub 101
Query
Add 101
Query

output

99
fake news!
fake news!

Solution

哎呀这个细节真的难以捉摸,真折磨人

#include<bits/stdc++.h>
using namespace std;
int main() {
long long n, m;
cin >> n >> m;
long long current_cases = n;
bool is_fake_news = false;
for (long long i = 0; i < m; i++) {
if(n<0){
is_fake_news = true;
}
string operation;
cin >> operation;
if (operation == "Add") {
int x;
cin >> x;
if (!is_fake_news) {
current_cases += x;
}
}
else if (operation == "Sub") {
int x;
cin >> x;
if (!is_fake_news) {
current_cases -= x;
if (current_cases < 0) {
is_fake_news = true;
}
}
}
else if (operation == "Query") {
if (is_fake_news) {
cout << "fake news!" << endl;
}
else {
cout << current_cases << endl;
}
}
}
return 0;
}
posted @   yoongii  阅读(91)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· winform 绘制太阳,地球,月球 运作规律
· AI与.NET技术实操系列(五):向量存储与相似性搜索在 .NET 中的实现
· 超详细:普通电脑也行Windows部署deepseek R1训练数据并当服务器共享给他人
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 上周热点回顾(3.3-3.9)
点击右上角即可分享
微信分享提示