1.凯撒密码
题目背景
某蒟蒻迷上了“小书童”,有一天登陆时忘记密码了(他没绑定邮箱or手机),于是便把问题抛给了神犇你。
题目描述
蒟蒻虽然忘记密码,但他还记得密码是由一个字符串组成。密码是由原文字符串(由不超过 50 个小写字母组成)中每个字母向后移动 n 位形成的。z
的下一个字母是 a
,如此循环。他现在找到了移动前的原文字符串及 n,请你求出密码。
输入格式
第一行:n。第二行:未移动前的一串字母
输出格式
一行,是此蒟蒻的密码
输入输出样例
输入 #1
1
qwe
输出 #1
rxf
说明/提示
字符串长度<=50
代码实现:
#include <iostream>
using namespace std;
int main() {
int n;
string str;
cin>>n;
cin>>str;
n = n % 26;
for(int i = 0; i < str.length(); i++) {
int tmp = str[i] + n;
if(tmp > 122) { //如果ascii码值大于122
//在重头(超过122从a开始)开始循环前的移动步数加上
//重头开始后的移动步数等于n
int m = 122 - str[i];
int s = n - m - 1 ;
str[i] = 'a' + s;
} else {
str[i] = str[i] + n;
}
}
cout<<str<<endl;
return 0;
}
原题链接:https://www.luogu.com.cn/problem/P1914
2.自动修正
题目描述
大家都知道一些办公软件有自动将字母转换为大写的功能。输入一个长度不超过 100 且不包括空格的字符串。要求将该字符串中的所有小写字母变成大写字母并输出。
输入输出样例
输入 #1
Luogu4!
输出 #1
LUOGU4!
代码实现:
#include <iostream>
using namespace std;
int main() {
string str;
//a => 97
//b => 98
//A => 65
//B => 66
cin>>str;
for(int i = 0; i < str.length(); i++) {
if(str[i] >= 'a' && str[i] <= 'z') {
str[i] = str[i] - 32;
}
}
cout<<str<<endl;
return 0;
}
原题链接:https://www.luogu.com.cn/problem/P5733
3.数字游戏
题目描述
小 K 同学向小 P 同学发送了一个长度为 8 的 01 字符串来玩数字游戏,小 P 同学想要知道字符串中究竟有多少个 1。
注意:01 字符串为每一个字符是 0 或者 1 的字符串,如“101”(不含双引号)为一个长度为 3 的 01 字符串。
输入格式
输入文件只有一行,一个长度为 8 的 01 字符串 s。
输出格式
输出文件只有一行,包含一个整数,即 01 字符串中字符 1 的个数。
输入输出样例
输入 #1
00010100
输出 #1
2
输入 #2
11111111
输出 #2
8
说明/提示
【输入输出样例 1 说明】
该 01 字符串中有 2 个字符 1。
【输入输出样例 2 说明】
该 01 字符串中有 8 个字符 1。
【数据规模与约定】
对于 20% 的数据,保证输入的字符全部为 0。
对于 100% 的数据,输入只可能包含字符 0 和字符 1,字符串长度固定为 8。
代码实现:
#include <iostream>
#include <cstring>
using namespace std;
int main() {
char s[10];
cin>>s;
int ans = 0;
for(int i = 0; i < strlen(s); i++) {
if(s[i] == '1') ans++;
}
cout<<ans<<endl;
return 0;
}
原题链接:https://www.luogu.com.cn/problem/P5660
4.唯一字符
题目描述
输入一个字符串,找到第一个仅出现一次的字符,输出这个字符。 如果没有找到,则输出"no find"。
输入格式
:字符串长度<100,没有空格。输出格式
:第一个仅出现一次的字符,或者"no find"
输入输出样例
输入 #1
abcabd
输出 #1
c
代码实现:
方法一:
#include <iostream>
#include <cstring>
using namespace std;
int main() {
char str[110];
int vis[100];
//初始化:
//方法1:
for(int i = 0; i <= 100; i++) vis[i] = 0;
//方法2:
memset(vis,0,sizeof(vis));
//方法3:将数组定义在main函数外 ,默认初始化值为0
cin>>str;
for(int i = 0; i < strlen(str); i++) {
for(int j = 0; j < strlen(str); j++) {
//char只能进行单个字符判断是否相等
if(str[i] == str[j]) {
vis[i]++;
}
}
if(vis[i] == 1) {
cout<<str[i]<<endl;
return 0;
}
}
cout<<"no find"<<endl;
return 0;
}
方法二:
#include <iostream>
#include <cstring>
using namespace std;
int main() {
string str;
cin>>str;
for(int i = 0; i < str.size(); i++) {
if(str.find(str[i]) == str.rfind(str[i])) {
cout<<str[i]<<endl;
return 0;
}
}
cout<<"no find"<<endl;
return 0;
}
5.数字转罗马
题目描述
给定一个字符串,里面有一些数字,要求将他们都替换成罗马数字。
罗马数字:{“0”,“I”,“II”,“III”,“IV”,“V”,“VI”,“VII”,“VIII”,“IX”} (罗马数字没0,这里就使用0代替)
输入输出格式
-
输入一行字符串。
-
输出将数字转化为罗马数字后的字符串。
输入输出样例
输入 #1
hello0123world
输出 #1
hello0IIIIIIworld
代码实现:
#include <iostream>
using namespace std;
char ch[20][20] = {"0","I","II","III","IV","V","VI","VII","VIII","IX"};
string up(string ans) {
string tmp;
for(int i = 0; i < ans.length(); i++) {
if(ans[i] >= '1' && ans[i] <= '9') {
int t = ans[i] - '0';
tmp += ch[t];
} else {
tmp += ans[i];
}
}
return tmp;
}
int main() {
string str;
cin>>str;
str = up(str);
cout<<str<<endl;
return 0;
}