哈尔滨工业大学上机题

哈尔滨工业大学上机题

题目一描述:
解密——加密的算法是26个英文字母,向后移动三位为密文(a加密后为d…最后x->a;y->b;z->c)有大小写。输入密文,计算明文。

#include<iostream>
using namespace std;
bool isCharacter(char c) {//判断是否是字母
	if ((c >= 'a' && c <= 'z') || (c >= 'A' && c <= 'Z')) {
		return true;
	}
	else
		return false;
}
char encode(char c) {//加密
	if (!isCharacter(c))
		return c;
	if (c >= 'x' && c <= 'z') {
		return c + 3 - 26;
	}
	else if (c >= 'X' && c <= 'Z') {
		return c + 3 - 26;
	}
	else {
		return c + 3;
	}
}
char decode(char c) {//解密
	if (!isCharacter(c))
		return c;
	if (c >= 'a' && c <= 'c') {
		return c - 3 + 26;
	}
	else if (c >= 'A' && c <= 'C') {
		return c - 3 + 26;
	}
	else {
		return c - 3;
	}
}
int main() {
	char c[50];
	cout << "输入字符串:";
	cin.getline(c, 50);
	cout << "加密后:";
	for (int i = 0;c[i] != '\0';i++) {
		c[i] = encode(c[i]);
		cout << c[i];
	}
	cout << endl;
	cout << "解密后:";
	for (int i = 0;c[i] != '\0';i++) {
		c[i] = decode(c[i]);
		cout << c[i];
	}
	cout << endl;
	return 0;
}

运行测试:
在这里插入图片描述
题目二描述:
1-20号牌,输入牌的数目,以及每张牌的编号。只有三张连续的牌可以兑换一张新牌,新牌不能参与兑换。编程实现计算可兑换的牌数。

算法思想:
遍历整个牌组,找到可以兑换的牌组,则进行兑换,直到不足兑换为止。然后继续向后遍历。

#include<iostream>
using namespace std;
int main() {
	int card[21];//用于存放各牌号的数目
	int n;//牌数
	int count = 0;//计数兑换牌数
	cout << "输入牌的数量:";
	cin >> n;
	for (int i = 1;i <= 20;i++)
		card[i] = 0;
	cout << "输入牌的编号:";
	for (int i = 0;i < n;i++) {
		int t;
		cin >> t;
		card[t]++;
	}
	for (int i = 1;i <= 18;) {
		if (card[i] >= 1 && card[i + 1] >= 1 && card[i + 2] >= 1) {
			count++;
			card[i]--;
			card[i + 1]--;
			card[i + 2]--;
		}
		else {
			i++;
		}
	}
	cout << "能兑换" << count << "张牌" << endl;
	return 0;
}

运行测试:
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值