NOIP 2001 普及组 复赛 求先序排列

本文分享了一种解决NOIP2001普及组复赛中求先序排列问题的方法,通过手动模拟找规律并利用C语言实现,最终成功通过测试案例。

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

NOIP 2001 普及组 复赛 求先序排列

1.初赛,这种题目做得多了去,但要上机写代码,突然捱了,尽然觉得有些困难。

2.不过,经验告诉我们,能用笔模拟出,那么也能用计算机算出。

3.目前,就是要靠手动模拟,找出规律。

4.//p1030 求先序排列
//http://blog.youkuaiyun.com/yuyanggo/article/details/47955837此文写得不错。
//根据上述文章进行编写,发现处理字符串位置时,十分困难,决定对程序进行改进,以方便编写为主
//经过一番调试,样例通过,提交AC。自认为本人代码量虽然大了些,但从编写角度,更容易写出,所谓“青出于蓝”
#include <stdio.h>
#include <string.h>
char in[10],post[10];//in中序 post后续
void pre(char *s1,char *s2){//s1中序  s2后序
    char *p,s3[10],s4[10];
    int k,len,i;
    len=strlen(s1);
    if(len==0)
        return;
    printf("%c",s2[len-1]);
    p=strchr(s1,s2[len-1]);
    k=p-s1;//此处忘记修改 k=p-in; 查了会
    for(i=0;i<k;i++)
        s3[i]=s1[i];
    s3[i]='\0';
    for(i=0;i<k;i++)
        s4[i]=s2[i];
    s4[i]='\0';
    pre(s3,s4);//左子树
    for(i=0;i<len-k-1;i++){
        s3[i]=s1[k+1+i];
    }
    s3[i]='\0';
    for(i=0;i<len-k-1;i++)
        s4[i]=s2[k+i];
    s4[i]='\0';
    pre(s3,s4);//右子树
}
int main(){
    int len;
    scanf("%s%s",in,post);
    pre(in,post);
    return 0;
}



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值