| ||||||||||
| Online Judge | Problem Set | Authors | Online Contests | User | ||||||
|---|---|---|---|---|---|---|---|---|---|---|
| Web Board Home Page F.A.Qs Statistical Charts | Current Contest Past Contests Scheduled Contests Award Contest | |||||||||
求大神帮看下哪里错了 不胜感激!思路是把源码和译码串中每个字母出现的次数记录下来
不过记录的是在一个字符数组中
把源码的每个字母出现的次数向右平移
平移0,就是原来自己,平移1。。。一直到25;
每平移一次,和译码每个字母出现的次数比较
因为记录次数用的是字符数组,所以比较好比较
直接一个strcmp就完事了
以下是我的代码:
#include<stdio.h>
#include<string.h>
#include<algorithm>
#include<stdlib.h>
#include<math.h>
using namespace std;
int main()
{
char ori[105],tra[105];
char ori1[105],tra1[105];
while(gets(ori))
{
gets(tra);
int l1=strlen(ori),l2=strlen(tra),tt;
int i,j;
for(j=0,i=0;i<l1;i++)
{
if(ori[i]>='A'&&ori[i]<='Z')
ori1[j++]=ori[i];
}
ori1[j]='\0';
for(j=0,i=0;i<l2;i++)
{
if(tra[i]>='A'&&tra[i]<='Z')
tra1[j++]=tra[i];
}
tra1[j]='\0';
int l11=strlen(ori1),l22=strlen(tra1);
char t1[27],t2[27];
memset(t1,'0',sizeof(t1));
memset(t2,'0',sizeof(t2));
for(i=0;i<l11;i++)
{
t1[ori1[i]-'A']++;
}
for(i=0;i<l22;i++)
{
t2[tra1[i]-'A']++;
}
t1[26]=t2[26]='\0';
//printf("%s\n%s\n",t1,t2);
char buffer[27];
for(i=0;i<=25;i++)
{
int temp=i;
memset(buffer,'0',sizeof(buffer));
buffer[26]='\0';
for(j=0;j<=25;j++)
{
if(temp+j>25)
temp-=26;
buffer[j+temp]=t1[j];
}
tt=0;
// printf("%s\n%s\n",buffer,t2);
if(strcmp(buffer,t2)==0)
{
tt=1;
}
if(tt)
goto end;
}
end:if(tt)
printf("YES\n");
else printf("NO\n");
}
return 0;
}
Followed by:
Post your reply here: |
All Rights Reserved 2003-2013 Ying Fuchen,Xu Pengcheng,Xie Di
Any problem, Please Contact Administrator