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
- 上传者