1 条题解
-
0
解题思路
- 字符与数字转换函数:
num2alph函数:接受一个整数c,如果c为0则返回'_',如果c为27则返回'.',否则返回c - 1 + 'a',即将数字转换为对应的字母或特殊字符。alph2num函数:接受一个字符c,如果c为'_'则返回0,如果c为'.'则返回27,否则返回c - 'a' + 1,即将字母或特殊字符转换为对应的数字。
- 输入处理和字符转换:
- 使用
while循环读取整数k,当k为0时结束循环。 - 读取字符串
s,初始化结果字符串res为s,并获取字符串s的长度n。 - 遍历字符串
s,使用alph2num函数将每个字符转换为数字存储在cc数组中。
- 使用
- 加密或解密操作:
- 再次遍历字符串,计算索引
pi = k * i % n,将cc[i] + i对28取余后的值存储在pc[pi]中。
- 再次遍历字符串,计算索引
- 输出结果:
- 遍历
pc数组,使用num2alph函数将每个数字转换为字符,并更新结果字符串res。 - 输出处理后的字符串
res。
- 遍历
#include<iostream> #include<string> using namespace std; char num2alph(int c){ if(c==0) return '_'; if(c==27) return '.'; return c-1+'a'; } int alph2num(char c){ if(c=='_') return 0; if(c=='.') return 27; return c-'a'+1; } int k,cc[75],pc[75]; int main(){ string s; while(cin>>k&&k){ cin >> s; string res = s; int n = s.size(); for(int i = 0; i < n; i++){ cc[i] = alph2num(s[i]); //cout << cc[i] << " "; } //cout << endl; for(int i = 0; i < n; i++){ int pi = k*i%n; pc[pi] = (cc[i]+i)%28; } for(int i = 0; i < n; i++) res[i] = num2alph(pc[i]); cout << res << endl; } } - 字符与数字转换函数:
- 1
信息
- ID
- 318
- 时间
- 1000ms
- 内存
- 256MiB
- 难度
- 10
- 标签
- 递交数
- 1
- 已通过
- 1
- 上传者