这个代码错哪了?
题目在http://noi.openjudge.cn/ch0107/11/
#include
#include
using namespace std;
int main(){
char a[200],b[200],c[200];
cin.getline(a,200);
cin.getline(b,200);
cin.getline(c,200);
int i,m=strlen(a),l,w=strlen(c),e;
for(i=0;ifor(l=0;lif(a[l]==a[i]&&b[l]!=b[i]){ //排除一个密码对应多个原文
cout<<"Failed";
return 0;
}
}
}
for(i=0;ifor(l=0;lif(b[l]==b[i]&&a[l]!=a[i]){ //排除一个原文对应多个密码
cout<<"Failed";
return 0;
}
}
}
for(i=0;ifor(l=0;l0;
if(c[i]==a[l]){
c[i]=b[l]; //如果c中字符==a中字符,将c的字符转换为b中字符
e=1;
break;
}
}
if(e==0){
cout<<"Failed"; //e用来排除原文不在已知密码中
return 0;
}
}
for(i=0;i
你的代码没有判断A-Z是否都出现过。增加一个char flag[26]={0}来记录A-Z的字母在原文中是否都出现了,如果在原文中出现,就把对应的位设为1,转换完后遍历一次,检查是否有为0的即为False
代码修改如下:
#include<iostream>
#include<string.h>
using namespace std;
int main() {
char a[200], b[200], c[200];
char flag[26] = { 0 };
cin.getline(a, 200);
cin.getline(b, 200);
cin.getline(c, 200);
int i, m = strlen(a), l, w = strlen(c), e;
for (i = 0; i < m; i++) {
for (l = 0; l < m; l++) {
if (a[l] == a[i] && b[l] != b[i]) { //排除一个密码对应多个原文
cout << "Failed";
return 0;
}
}
}
for (i = 0; i < m; i++) {
flag[b[i] - 'A'] = 1; //将出现的字母位置设置为1
for (l = 0; l < m; l++) {
if (b[l] == b[i] && a[l] != a[i]) { //排除一个原文对应多个密码
cout << "Failed";
return 0;
}
}
}
for (i = 0; i < w; i++) {
for (l = 0; l < m; l++) {
e = 0;
if (c[i] == a[l]) {
c[i] = b[l]; //如果c中字符==a中字符,将c的字符转换为b中字符
e = 1;
break;
}
}
if (e == 0) {
cout << "Failed"; //e用来排除原文不在已知密码中
return 0;
}
}
//判断字符是否都在原文中出现
for (i = 0; i < 26; i++)
{
if (flag[i] == 0)
{
cout << "Failed";
return 0;
}
}
for (i = 0; i < w; i++) {
cout << c[i];
}
return 0;
}
# include<bits/stdc++.h>
using namespace std;
char jm1[50];
char jm2[50];
char mw[110],yw[110];
char strmw[1000];
char stryw[1000];
int main(){
while (~scanf("%s",mw)){
scanf("%s",yw);
scanf("%s",strmw);
int slen = strlen(mw);
memset(jm1,0,sizeof jm1);
memset(jm2,0,sizeof jm2);
bool ok = true;
for (int i=0;i<slen;i++){
if (jm1[yw[i]-'A']!=mw[i] && jm1[yw[i]-'A']!=0){
ok = false;
break;
}
jm1[yw[i]-'A'] = mw[i];
}
for (int i = 0 ;i<26 ;i++)
if (jm1[i]==0)
ok = false;
for (int i=0;i<slen;i++){
if (jm2[mw[i]-'A']!=yw[i] && jm2[mw[i]-'A']!=0){
ok = false;
break;
}
jm2[mw[i]-'A'] = yw[i];
}
if (ok){
slen = strlen(strmw);
for (int i=0 ;i<slen ;i++ ){
if (jm2[strmw[i]-'A']==0){
ok = false;
break;
}
stryw[i] = jm2[strmw[i]-'A'];
}
stryw[slen]=0;
}
if (ok)
printf("%s\n",stryw);
else
printf("Failed\n");
}
return 0;
}
您好,我是有问必答小助手,您的问题已经有小伙伴帮您解答,感谢您对有问必答的支持与关注!