您的位置:首页 > 其它

SSL-ZYC 前缀转后缀

2018-02-01 19:50 141 查看
题目大意:

输入一个前缀表达式,输出它所对应的后缀表达式。

前缀:先写运算符,接着是第一个操作数,最后是第二个操作数;

后缀:先写第一个操作数,接着写第二个操作数,最后写运算符。

思路:

emm…

想了好一会 然而还是不会 ,发现这道题有两处细节:

(1)前缀和后缀的数字顺序完全一样

(2)前缀和后缀的符号顺序完全相反

然而这道题我最后还是用二叉树做的……

不难发现,前缀的顺序是“根左右”,后缀的顺序是“左右根”,那利用这条重要的第三处细节,我们就可以只用5行主代码完成这道题。

代码:

#include <cstdio>
#include <iostream>
using namespace std;

char c[101],ch;

void read(int x)  //读入
{
ch=getchar();
if (ch==' ') ch=getchar();  //读入字符
if (ch==10) return;  //换行符特判
if (ch>='0'&&ch<='9')   //如果是数字
{
c[x]=ch;
return;  //返回
}
if (ch=='+'||ch=='-')  //如果是字符
{
c[x]=ch;
read(x*2);  //找子节点
read(x*2+1);  //还是找子节点
}
}

void write(int x)  //输出
{
if (c[x]=='+'||c[x]=='-')  //如果是字符
{
write(x*2);  //先输出数字
write(x*2+1);  //还是先输出数字
}
if (c[x]!=' ') printf("%c ",c[x]);  //输出字符
}

int main()  //仅有的5行代码
{
freopen("j4.in","r",stdin);
freopen("j4.out","w",stdout);  //文件输入输出2行
read(1);  //读入1行
write(1);  //输出1行
return 0;  //结束程序1行
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: