[U]3.4.2 简单的递归题

本文介绍如何使用C++代码解决POJ平台上的问题,包括字符串操作、递归算法和文件流处理。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

拷的POJ的代码,直接A了。

/*
ID:bysen
LANG:C++
PROG:heritage
*/
#include<iostream>
#include<stdio.h>
#include<string>
#include<fstream>
using namespace std;


    ifstream fin("heritage.in");
 	ofstream fout("heritage.out");
 	
int strlen( char *a )
{
 	int i;
 	for( i=0;a[i]!='\0';i++ )
 		 ;
 	return i; 
}
 	
void DG( char *a,char *b )
{
	int left=0,right=strlen(a)-1;
	if( strlen(a)==1 )
	{
		fout<<a[0];
		return ;
	}
    int left1,right1;
    //left right1 left1 right
    char root=a[0];
    int index=0;
	left++;
    while( b[index]!=root )
		index++;//通过中序遍历找分划点
    right1=index;
    left1=right1+1;
	if( left==right )
		fout<<a[right];
	else
	{
		char a1[100],b1[100];
		char a2[100],b2[100];
		int i;
		int flag=left;
		
		for( i=0;flag<=right1;flag++ )
			a1[i++]=a[flag];
		a1[i]='\0';

		for( i=0;i<index;i++ )
			b1[i]=b[i];
		b1[i]='\0';

		flag=left1;

		for( i=0;flag<=right;flag++ )
			a2[i++]=a[flag];
		a2[i]='\0';

		flag=index+1;
		for( i=0;flag<=right;flag++ )
			b2[i++]=b[flag];
		b2[i]='\0';

		if( left<=right1 )
		DG( a1,b1 );
		if( left1<=right )
		DG( a2,b2 );

	}
    fout<<root;
}    
int main()
{
	char dateP[100];
	char dateM[100];
    fin>>dateM>>dateP;
    DG( dateP,dateM );
    fout<<endl;
    return 0;
}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值