2023/03/08 机试学习记录

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与本题相同

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值