| ||||||||||
| 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 | |||||||||
Re:求大神帮看下哪里错了 不胜感激!In Reply To:求大神帮看下哪里错了 不胜感激! Posted by:quanyibo at 2014-04-25 23:28:54 > 思路是把源码和译码串中每个字母出现的次数记录下来
> 不过记录的是在一个字符数组中
> 把源码的每个字母出现的次数向右平移
> 平移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