杭电acm1306

http://acm.hdu.edu.cn/showproblem.php?pid=1306

这题就是通过两个字符串的依次移动,然后求出对应字符相等的最大的那个数,题目中的例子可以较清楚的理解,在输出的地方注意,当这个数为0时直接输出0而非分数,当然这个数的两倍和两字符串长度和相等时,输出的也是1而不是分数,然后如果输出的一定得是分数时,先用辗转相除法求出最大公约数,再将之转化为两个互质的分子和分母,这题感觉很悲剧,居然暴力的代码也能0ms过

#include<stdio.h>
#include<string.h>
int huzhi(int a,int b)
{
    int r=a%b;
    while(r)
    {
        a=b;
        b=r;
        r=a%b;
    }
    return b;
}
int main()
{
    int sum,max,i,j,t,h;
    char s1[1000],s2[1000];
    while(scanf("%s %s",s1,s2),strcmp("-1",s1))
    {
       max=0;
       for(i=0;s1[i]!='\0';i++)
       {
           sum=0;
           t=i;
           for(j=0;s2[j]!='\0';j++,t++)
           if(s1[t]==s2[j])
           sum++;
           if(sum>max)
           max=sum;
       }
       for(i=0;s2[i]!='\0';i++)
       {
           sum=0;
           t=i;
           for(j=0;s1[j]!='\0';j++,t++)
           if(s2[t]==s1[j])
           sum++;
           if(sum>max)
           max=sum;
       }
       max*=2;
       if(max==0)
       {
          printf("appx(%s,%s) = %d\n",s1,s2,max);
          continue;
       }
       else if(max==(strlen(s1)+strlen(s2)))
       {
            printf("appx(%s,%s) = 1\n",s1,s2);
            continue;
       }
       h=huzhi(strlen(s2)+strlen(s1),max);
       printf("appx(%s,%s) = %d/%d\n",s1,s2,max/h,(strlen(s1)+strlen(s2))/h);
    }
    return 0;
}
View Code

 

posted @ 2013-05-23 18:16  执着追求的IT小小鸟  阅读(206)  评论(0编辑  收藏  举报