1 条题解

  • 0
    @ 2025-8-24 22:52:28

    自动搬运

    查看原文

    来自洛谷,原作者为

    avatar cyb6666
    **

    搬运于2025-08-24 22:52:28,当前版本为作者最后更新于2023-11-22 23:27:03,作者可能在搬运后再次修改,您可在原文处查看最新版

    自动搬运只会搬运当前题目点赞数最高的题解,您可前往洛谷题解查看更多

    以下是正文


    题目传送门


    分析

    这道题其实只是一道前缀转后缀的题,难度并不高。

    前缀表达式和后缀表达式的区别在于符号的位置。

    打个生动的比喻,假设数字和符号都是人。

    在前缀表达式时,参与运算的数字就是参与运算的符号的小跟班,参与运算的符号永远在参与运算的数字的前面。

    在后缀表达式时,情况就不一样了,这下参与运算的符号成了参与运算的数字的小跟班。

    此时我们就能想到一种递归的解法:

    每次递归,我们先输入当前的操作值。

     如果是数字,直接输出。
     否则,我们先调用递归函数两次(找两个老大),再输出本身。
    

    代码

    #include <bits/stdc++.h>
    using namespace std;
    void dfs() {
    	string s;	//一定要用局部变量
    	cin >> s;
    	if (s[0] == '0')
    		exit(0);	//直接结束程序
    	if (s[0] >= '0' && s[0] <= '9')
    		cout << s << " ";
    	else {
    		dfs();	//找第一个老大
    		dfs();	//找第二个老大
    		printf("%c ", s[0]);	//输出自己
    	}
    }
    int main() {
    	while (1) {
    		dfs();
    		puts("");
    	}
    	return 0;
    }
    
    

    完结撒花,留下一个赞吧~

    • 1

    信息

    ID
    8749
    时间
    1000ms
    内存
    128MiB
    难度
    2
    标签
    递交数
    0
    已通过
    0
    上传者