- 字符串还原
- 2017-06-30 23:18:31 @
样例过了,评测死活不能AC
c++
#include<iostream>
#include<cstdlib>
using namespace std;
int n;
bool pd(string sta,string stb,string stc)
{
bool b;
int a1,a2,a3;
b=true;
for (int i=0;i<=n-1;i++)
{
a1=sta[i]+1;
a2=stb[i]-1;
a3=stc[n-i-1];
if (a2<97) a2=a2+26;
if (a1>122) a1=a1-26;
if (a1!=a2||a1!=a3||a2!=a3)
b=false;
}
return b;
}
void sc(string str)
{
for (int i=n-1;i>=0;--i) cout<<str[i];
exit;
}
int main()
{
string st1,st2,st3;
cin>>n;
cin>>st1>>st2>>st3;
if(pd(st1,st2,st3)){ sc(st3); exit;}
if(pd(st2,st1,st3)){ sc(st3); exit;}
if(pd(st1,st3,st2)){ sc(st2); exit;}
if(pd(st3,st1,st2)){ sc(st2); exit;}
if(pd(st3,st2,st1)){ sc(st1); exit;}
if(pd(st2,st3,st1)){ sc(st1); exit;}
system("pause");
return 0;
}
4 条评论
-
于氏春秋C++ LV 6 @ 2017-07-03 22:13:26
不过真心没遇到汉字什么情况喵。修改了大佬所说的0<=K<=6的问题,并把exit改为了exit(0) (原谅我一时眼花╮(╯_╰)╭ ),再次表示对大佬的敬意,太谢谢了!
#include<iostream> #include<cstdlib> using namespace std; int n; bool pd(string sta,string stb,string stc) { bool b; int a1,a2,a3; for (int k=0;k<=6;k++) { b=true; for (int i=0;i<=n-1;i++) { a1=sta[i]+k; a2=stb[i]-k; a3=stc[n-i-1]; if (a2<97) a2=a2+26; if (a1>122) a1=a1-26; if (a1!=a2||a1!=a3||a2!=a3) b=false; } if (b) { return b;break;} } return false; } void sc(string str) { for (int i=n-1;i>=0;i--) cout<<str[i]; exit(0); } int main() { string st1,st2,st3; cin>>n; cin>>st1>>st2>>st3; if(pd(st1,st2,st3)){ sc(st3); exit(0);} if(pd(st2,st1,st3)){ sc(st3); exit(0);} if(pd(st1,st3,st2)){ sc(st2); exit(0);} if(pd(st3,st1,st2)){ sc(st2); exit(0);} if(pd(st3,st2,st1)){ sc(st1); exit(0);} if(pd(st2,st3,st1)){ sc(st1); exit(0);} system("pause"); return 0; }
-
2017-07-03 22:05:30@
@沉江底@mrkrnblsa 问题已解决,谢谢谢谢!!(表示pascal转c++好累)
-
2017-07-01 11:13:16@
好像还有一个地方吧,那个你是不是默认k值为1了(逃
-
2017-07-01 08:11:21@
if (a1>122) a1=a1-26;
这句看上去没错,但问题是电脑有时候会把一些ascll大于127的字符进行一些神奇的处理,这样你就会因为这句话错了。具体点,汉字是由两个ascll组成的,再具体点我也不知道了。。
- 1