U5737 纸条
题目背景
明明和牛牛是一对要好的朋友,他们经常上课也想讲话,但是他们的班级是全校纪律最好的班级,所以他们只能通过传纸条的方法来沟通。但是他们并不能保证每次传纸条老师都无法看见,所以他们对纸条进行了加密。
题目描述
明明和牛牛的纸条一共分为两行,第一行有26个小写字母,代表着每个字符的加密字符——第一个字母代表着a(A)的加密字符,第二个字母代表着b(B)的加密字符...(大写字母的加密字符是相同的大写字母)。第二行就是加密过的话,需要根据第一行破译出它的内容。如果加密有误,就输出“Error”。(一个)
加密有误指第一行的26字母有重复(有字母没有出现)
输入输出格式
输入格式:
两行,第一行是26个字母,意思如题。第二行是一段加密过的话
输出格式:
如题:破译出的话
输入输出样例
输入样例#1:
bcdefghijklmnopqrstuvwxyza J ibwf b ofx qfodjm.
输出样例#1:
I have a new pencil.
输入样例#2:
bcdefghijklmnopqrstuvwxyja J ibwf b ofx qfodjm.
输出样例#2:
Error
说明
加密过的话长度在255位以内
输入中包括‘,‘,‘.‘,‘?‘三种标点
- 输入规模
40%的数据满足:输出没有Error
100%数据满足:只有两个Error
思路:水题。
错因:输入方式错误。
#include<cstdio> #include<cstring> #include<cstdlib> #include<iostream> #include<algorithm> using namespace std; int num[27]; string s,a,p; char ans[27]={‘0‘,‘a‘,‘b‘,‘c‘,‘d‘,‘e‘,‘f‘,‘g‘,‘h‘,‘i‘,‘j‘,‘k‘,‘l‘,‘m‘,‘n‘,‘o‘,‘p‘,‘q‘,‘r‘,‘s‘,‘t‘,‘u‘,‘v‘,‘w‘,‘x‘,‘y‘,‘z‘}; int main(){ getline(cin,s); for(int i=0;i<26;i++){ int k=s[i]-‘a‘+1; if(num[k]){ cout<<"Error"; return 0; } num[k]=i+1; } getline(cin,p); for(int i=0;i<=p.length();++i) { int flag=0,b; if(p[i]>=‘A‘&&p[i]<=‘Z‘){ flag=1; p[i]+=32; } if(p[i]>=‘a‘&&p[i]<=‘z‘){ b=num[p[i]-‘a‘+1]; p[i]=ans[b]; if(flag) p[i]-=32; } } cout<<p; return 0; }
时间: 2024-10-31 13:19:22