把字符串看成环,每位输出字符是原串该位与下一位(末位绕回首位)的 ASCII 值之和。
OJ: roj
题目 ID: 1133
难度:入门
标签:入门字符串模拟python
创建: 2026-09-29 20:14
更新: 2026-10-05 02:58
题目描述
给定长度
样例:输入 1234,输出 cege。
思路
按定义逐位模拟:对每一位
参考代码
Python 版:
python
#!/usr/bin/env python3
# Author by Rainboy blog: https://rainboylv.com github: https://github.com/rainboylvx
# rbook: -> https://rbook.roj.ac.cn https://rbook2.roj.ac.cn
# rainboy的学习导航网站: https://idx.roj.ac.cn
# create_at: 2026-09-29 20:15
# update_at: 2026-09-29 20:15
import sys
def solve() -> None:
data = iter(sys.stdin.buffer.read().split())
s: str = next(data).decode()
# 环形搭档:第 i 个字符与第 i+1 个配对,末位绕回首字符;一次错位拼接即可全配对
partner: str = s[1:] + s[:1]
# 亲朋字符 = 两位 ASCII 值之和对应的字符(ASCII ≤ 63,和 ≤ 126,仍是可打印字符)
print(''.join(chr(ord(a) + ord(b)) for a, b in zip(s, partner)))
if __name__ == "__main__":
solve()C++ 版(同一算法):
cpp
/**
* Author by Rainboy blog: https://rainboylv.com github: https://github.com/rainboylvx
* rbook: -> https://rbook.roj.ac.cn https://rbook2.roj.ac.cn
* rainboy的学习导航网站: https://idx.roj.ac.cn
* create_at: 2026-10-05 02:58
* update_at: 2026-10-05 02:58
*/
#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
char s[105]; // 输入字符串
char ans[105]; // 亲朋字符串
int main() {
scanf("%s", s);
int n = strlen(s);
// 第 i 位由 s[i] 与环形下一位 s[(i+1)%n] 的 ASCII 之和得到
for (int i = 0; i < n; i++) {
int j = (i + 1) % n;
ans[i] = s[i] + s[j];
}
ans[n] = '\0';
printf("%s\n", ans);
return 0;
}