KY90 简单密码
描述
Julius Caesar曾经使用过一种很简单的密码。 对于明文中的每个字符,将它用它字母表中后5位对应的字符来代替,这样就得到了密文。 比如字符A用F来代替。如下是密文和明文中字符的对应关系。 密文 A B C D E F G H I J K L M N O P Q R S T U V W X Y Z 明文 V W X Y Z A B C D E F G H I J K L M N O P Q R S T U 你的任务是对给定的密文进行解密得到明文。 你需要注意的是,密文中出现的字母都是大写字母。密文中也包括非字母的字符,对这些字符不用进行解码。
思路
对字符串中A-E进行增加,F-Z进行减少,其余字符不操作
注意三次输入操作
代码
#include<cstdio>
#include<iostream>
#include<string>
using namespace std;
int main() {
string s1, s2, s3;
string s_start = "START";
string s_end = "END";
string s_ENDOFINPUT = "ENDOFINPUT";
while (getline(cin, s1)) {
if (s1 == s_ENDOFINPUT)
break;
getline(cin, s2);
for (size_t i = 0; i < s2.size(); i++) {
if ('A' <= s2[i] && s2[i] <= 'E') {
s2[i] += 21;
}
else if ('F' <= s2[i] && s2[i] <= 'Z') {
s2[i] -= 5;
}
}
cout << s2 << endl;
getline(cin, s3);
}
return 0;
}
KY127 统计字符
描述
统计一个给定字符串中指定的字符出现的次数。
测试输入包含若干测试用例,每个测试用例包含2行,第1行为一个长度不超过5的字符串,第2行为一个长度不超过80的字符串。注意这里的字符串包含空格,即空格也可能是要求被统计的字符之一。当读到’#'时输入结束,相应的结果不要输出。
思路
两个string存储字符,两层for循环遍历
代码
#include<cstdio>
#include<iostream>
#include<string>
#include<vector>
#include<algorithm>
using namespace std;
int main() {
string s1, s2, ret;
vector<int> v1;
int number = 0;
while (getline(cin, s1)) {
if (s1 == "#")
break;
ret += s1;
getline(cin, s2);
for (size_t i = 0; i < s1.size(); i++) {
int temp = 0;
v1.push_back(temp);
for (size_t j = 0; j < s2.size(); j++) {
if (s1[i] == s2[j]) {
v1[number]++;
}
}
number++;
}
}
for (size_t i = 0; i < v1.size(); i++) {
cout << ret[i] << " " << v1[i] << endl;
}
return 0;
}
KY113 字母统计
描述
输入一行字符串,计算其中A-Z大写字母出现的次数
思路
两层for循环遍历
代码
#include<cstdio>
#include<iostream>
#include<string>
#include<vector>
#include<algorithm>
using namespace std;
int main() {
int arr[26];
string s1;
char c = 'A';
for (size_t i = 0; i < 26; i++) {
arr[i] = 0;
}
getline(cin, s1);
for (size_t i = 0; i < 26; i++) {
for (size_t j = 0; j < s1.size(); j++) {
if (c == s1[j])
arr[i]++;
}
c++;
}
c = 'A';
for (size_t i = 0; i < 26; i++) {
cout << c << ":" << arr[i] << endl;
c++;
}
return 0;
}
KY45 skew数
描述
在 skew binary 表示中,第 k 位的值 x[k] 表示 x[k]×(2^(k+1)-1)。每个位上的可能数字是 0 或 1,最后面一个非零位可以是 2,例如,10120(skew) = 1×(2^5-1) + 0×(2^4-1) + 1×(2^3-1) + 2×(2^2-1) + 0×(2^1-1) = 31 + 0 + 7 + 6 + 0 = 44。前十个 skew 数是 0、1、2、10、11、12、20、100、101、以及 102。
思路
输入string,遍历容器,用count记录次方
代码
#include<cstdio>
#include<iostream>
#include<string>
#include<vector>
#include<algorithm>
#include<math.h>
using namespace std;
int main() {
string s1;
while (cin >> s1) {
int ret = 0 , count = s1.size();
for (size_t i = 0; i < s1.size(); i++) {
if (s1[i] != 0) {
ret += ((pow(2, count) - 1) * (s1[i] - 48));
}
count--;
}
cout << ret << endl;
}
return 0;
}
备注
KY51与本题相同