哈尔滨工业大学上机题
题目一描述:
解密——加密的算法是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;
}
运行测试: