| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 889 人关注过本帖
标题:谁能为我解释一下这个程序?
只看楼主 加入收藏
cccccw
Rank: 1
等 级:新手上路
帖 子:8
专家分:0
注 册:2011-8-30
结帖率:0
收藏
已结贴  问题点数:20 回复次数:11 
谁能为我解释一下这个程序?
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#define N 100
char sa[N],sb[N],temp[N];
int max(int a,int b)
{
    if(a>b)return a;
    else   return b;
}
int f(int i,int j)
{
    if(i<0||j<0)return 0;
    else if(sa[i]-sb[j]==0)
    {
        return f(i-1,j-1)+1;
    }
    else return max(f(i-1,j),f(i,j-1));
}
int main()
{
    int i,j,tj,r,v;
    scanf("%s%s",&sa,&sb);
    i=strlen(sa);
    j=strlen(sb);
    v=f(i-1,j-1);//v就是所求的最大公共字符串的个数,用f函数来实现
    printf("%d\n",v);
    for(i=0,r=0,tj=0;i<strlen(sa)&&r<v;i++)
    {
        for(j=tj;j<strlen(sb);j++)
            f(sa[i]==sb[j])
        {
            temp[r++]=sa[i];
            break;
        }
        else;
        if(j==strlen(sb));
        else tj=j;
    }
    for(i=0;i<v;i++)printf("%c",temp[i]);
    printf("\n");
    return 0;
}

搜索更多相关主题的帖子: max include return 字符串 
2011-08-30 23:09
leech58
Rank: 2
来 自:湖南
等 级:论坛游民
帖 子:18
专家分:58
注 册:2011-8-29
收藏
得分:3 
占个沙发  喝杯咖啡 看个程序。。。

诚心交流!
2011-08-30 23:46
韩54521风
Rank: 4
等 级:业余侠客
帖 子:75
专家分:212
注 册:2011-6-11
收藏
得分:3 
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#define N 100
char sa[N],sb[N],temp[N];/*最好还是在main函数中出现*/
int max(int a,int b)    /*这个函数是求a和b中的较大值,并且返回*/
{
    if(a>b)return a;
    else   return b;
}
int f(int i,int j)     /*这个函数好像是有问题啊!函数里边没有定义sa[i]和sb[j]两个变量,表达式中却出现了*/
{
    if(i<0||j<0)return 0;
    else if(sa[i]-sb[j]==0)
    {
        return f(i-1,j-1)+1;
    }
    else return max(f(i-1,j),f(i,j-1));
}
int main()
{
    int i,j,tj,r,v;
    scanf("%s%s",&sa,&sb);
    i=strlen(sa);
    j=strlen(sb);
    v=f(i-1,j-1);//v就是所求的最大公共字符串的个数,用f函数来实现
    printf("%d\n",v);
    for(i=0,r=0,tj=0;i<strlen(sa)&&r<v;i++)
    {
        for(j=tj;j<strlen(sb);j++)
            f(sa[i]==sb[j])
        {
            temp[r++]=sa[i];
            break;
        }
        else;
        if(j==strlen(sb));
        else tj=j;
    }
    for(i=0;i<v;i++)printf("%c",temp[i]);
    printf("\n");
    return 0;
}
2011-08-31 01:00
fourleaves
Rank: 2
等 级:论坛游民
帖 子:194
专家分:99
注 册:2010-5-8
收藏
得分:3 
qq号给我吧,1号再发到你邮箱去。这段代码没问题。


再复杂的问题也基于最简单的原理。耐心,耐心!丰富自己!等待时机!
2011-08-31 02:10
cccccw
Rank: 1
等 级:新手上路
帖 子:8
专家分:0
注 册:2011-8-30
收藏
得分:0 
回复 4楼 fourleaves
QQ:1334276883
thank you,
我是初学者,这个程序看不懂
2011-08-31 09:47
cccccw
Rank: 1
等 级:新手上路
帖 子:8
专家分:0
注 册:2011-8-30
收藏
得分:0 
回复 3楼 韩54521风
谢谢,虽然还是不懂
2011-08-31 09:49
statics
Rank: 7Rank: 7Rank: 7
等 级:黑侠
帖 子:163
专家分:625
注 册:2011-8-29
收藏
得分:3 
回复 6楼 cccccw
      for(j=tj;j<strlen(sb);j++)
            f(sa[i]==sb[j])
        {
            temp[r++]=sa[i];
            break;
        }
        else;
        if(j==strlen(sb));
        else tj=j;
这里面有很多让人难以理解的地方,应该是这样吧?!建议规范些,对你以后有益!!!
for(j=tj;j<strlen(sb);j++)
{
    if(sa[i]==sb[j])
    {
        temp[r++]=sa[i];
        break;
    }
    else
    {        
        if(j==strlen(sb))
            ;
        else
            tj=j;
    }
}

惟我独行...
2011-08-31 10:00
cccccw
Rank: 1
等 级:新手上路
帖 子:8
专家分:0
注 册:2011-8-30
收藏
得分:0 
回复 7楼 statics
谢谢
2011-08-31 11:06
cccccw
Rank: 1
等 级:新手上路
帖 子:8
专家分:0
注 册:2011-8-30
收藏
得分:0 
回复 3楼 韩54521风
if(i<0||j<0)return 0;
    else if(sa[i]-sb[j]==0)
    {
        return f(i-1,j-1)+1;
    }
    else return max(f(i-1,j),f(i,j-1));
这段是什么意思?能对我解释一下吗?
2011-08-31 15:44
晓云林
Rank: 2
等 级:论坛游民
帖 子:46
专家分:35
注 册:2011-8-29
收藏
得分:3 
期待算法高手详细解说~
2011-08-31 17:55
快速回复:谁能为我解释一下这个程序?
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.017670 second(s), 7 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved