SSL-ZYC 前缀转后缀
2018-02-01 19:50
141 查看
题目大意:
输入一个前缀表达式,输出它所对应的后缀表达式。
前缀:先写运算符,接着是第一个操作数,最后是第二个操作数;
后缀:先写第一个操作数,接着写第二个操作数,最后写运算符。
思路:
emm…
想了好一会 然而还是不会 ,发现这道题有两处细节:
(1)前缀和后缀的数字顺序完全一样
(2)前缀和后缀的符号顺序完全相反
然而这道题我最后还是用二叉树做的……
不难发现,前缀的顺序是“根左右”,后缀的顺序是“左右根”,那利用这条重要的第三处细节,我们就可以只用5行主代码完成这道题。
代码:
输入一个前缀表达式,输出它所对应的后缀表达式。
前缀:先写运算符,接着是第一个操作数,最后是第二个操作数;
后缀:先写第一个操作数,接着写第二个操作数,最后写运算符。
思路:
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行 }
相关文章推荐
- 前缀、中缀、后缀表达式及其相互转化的Java实现
- UESTC 771 最大容积(前缀后缀和)
- 中缀表达式转换成前缀表达式和后缀表达式
- 自增、自减运算符的前缀和后缀
- 前缀、中缀、后缀表达式与二叉树的前序、中序、后序遍历
- 中缀表达式转换成前缀表达式和后缀表达式
- 中缀式 变 前缀试,变后缀试,然后表达式求值
- IT笔试题中经常出现的前缀、中缀、后缀表达式转换问题-----阿冬专栏
- 前缀、中缀、后缀表达式
- 前缀表达式,中缀表达式,后缀表达式转化和计算
- 成员函数、友元函数++前缀后缀
- 中缀表达式到前缀表达式和后缀表达式
- 前缀 中缀 后缀 波兰式 逆波兰式
- POJ 2752+KMP+利用next数组性质求出所有相同的前缀和后缀
- 中缀表达式转换成前缀表达式和后缀表达式的极其简单方法【转】
- SSL-ZYC 1454 找石油
- 727运算符前缀变后缀
- 中缀表达式转换为前缀及后缀表达式并求值【摘】
- 中缀、前缀和后缀表达式求值问题
- hdu4691(后缀数组求最长公共前缀)