题意:比较两个字符串,位置相同的记录,可以移动比较求最大的位置相同数。样例给的很明确。
最开始只从一边移动比较,后来发现AAAB,BAAA样例,才明白。
刚开始开了四个字符串组:
#include<stdio.h>
#include<string.h>
int main()
{
char a[100],b[100],c[100],d[100];
while(scanf("%s",a) != EOF)
{
if(strcmp(a,"-1") == 0)
break;
else
scanf("%s",b);
if(strlen(a) < strlen(b))
{
strcpy(c,b);
strcpy(d,a);
}
else
{
strcpy(c,a);
strcpy(d,b);
}
int lentha = strlen(c);
int lenthb = strlen(d);
int same = 0,s = 0;
for(int i = 0;i < lentha; i++)
{
s = 0;
for(int j = 0;j < lenthb && c[j+i] != '\0'; j++)
if(c[j + i] == d[j]) s++;
if(s > same)
same = s;
}
for(int i = 0;i < lenthb; i++)
{
s = 0;
for(int j = 0;j < lentha && d[j+i] != '\0'; j++)
if(d[j + i] == c[j]) s++;
if(s > same)
same = s;
}
if(same == 0)
printf("appx(%s,%s) = 0\n",a,b);
else if(same*2 == lentha + lenthb)
printf("appx(%s,%s) = 1\n",a,b);
else
{
int yueshu = 1;
same *= 2;
int sum = lentha + lenthb;
for(int i = 2;i <= same; i++)
{
if(sum%i == 0 && same%i == 0)
yueshu = i;
}
printf("appx(%s,%s) = %d/%d\n",a,b,same/yueshu,sum/yueshu);
}
}
return 0;
}
可以简化:
#include<stdio.h>
#include<string.h>
int main()
{
char a[100],b[100];
while(scanf("%s",a) != EOF)
{
if(strcmp(a,"-1") == 0)
break;
else
scanf("%s",b);
int lentha = strlen(a);
int lenthb = strlen(b);
int same = 0,s = 0;
for(int i = 0;i < lentha; i++) //需要两次不同方向的遍历,第一次
{
s = 0;
for(int j = 0;j < lenthb && a[j+i] != '\0'; j++)
if(a[j + i] == b[j]) s++;
if(s > same)
same = s;
}
for(int i = 0;i < lenthb; i++) //第二次
{
s = 0;
for(int j = 0;j < lentha && b[j+i] != '\0'; j++)
if(b[j + i] == a[j]) s++;
if(s > same)
same = s;
}
if(same == 0)
printf("appx(%s,%s) = 0\n",a,b);
else if(same*2 == lentha + lenthb)
printf("appx(%s,%s) = 1\n",a,b);
else
{
int yueshu = 1;
same *= 2;
int sum = lentha + lenthb;
for(int i = 2;i <= same; i++) //求公约数
{
if(sum%i == 0 && same%i == 0)
yueshu = i;
}
printf("appx(%s,%s) = %d/%d\n",a,b,same/yueshu,sum/yueshu);
}
}
return 0;
}