求助
查看原帖
求助
1051583
zhangzeyao20110507楼主2023/11/21 19:43

我发了一个题解,提交时老是说我标识符重复,这是什么原因?

题解内容

题意:将前缀表达式转换成后缀表达式。

首先让我们了解一下什么是前缀、中缀、后缀表达式:

我们生活中常使用到的数学算式如:  ( 3+4 )×5−6\ (\ 3+4\ )\times5-6

这是一种中缀表达式,还有两种我们不常见过的表达式:前缀表达式与后缀表达式。

前缀表达式: −×+ 3 4 5 6-\times+\ 3\ 4 \ 5 \ 6

后缀表达式: 3 4+5×6 −3\ 4+ 5\times 6\ -

通过观察可以发现:前缀表达式运算符号提前,后缀表达式运算符号靠后,那么思路不就出来了吗?

思路:输入前缀表达式,通过编程实现将表达式符号靠后输出。

分成两种情况讨论:

1.是数字直接输出;

2.是运算符号先输出后两个数字再输出运算符号。

那么,用模拟和递归就能解出来了!注意:递归中如果读到 0 直接用 exit 结束程序,不能用 return 因为还会返回到 main 函数。

代码:

//洛谷P9857 
#include <stdio.h>
#include <stdlib.h> //exit函数需用库 
void hzbds()
{
    char a[105]; scanf("%s",a); //输入前缀表达式 
    if(a[0]=='0') exit(0); //如题意读到0终止,不能用return,直接终止程序 
    if(a[0]>'0'&&a[0]<='9') 
	 printf("%s ",a); //数字直接输出 
    else //是运算符号先输出后两位数字再输出运算符号 
    {
    	hzbds(); hzbds(); //后两位数字 
        printf("%c ",a[0]); //运算符号 
    }
}
int main()
{
    while(1) //死循环,结束条件exit(0)在函数中 
    {
        hzbds(); //将前缀表达式转化成后缀表达式 
        puts(""); //换行 
    }
    return 0; //完美结束好习惯 
}

注:本题解为引用题解,参考此处。

2023/11/21 19:43
加载中...