没有合适的资源?快使用搜索试试~ 我知道了~
逆波兰表达式 把M个同样的苹果放在N个同样的盘子里,允许有的盘子空着不放,问共有多少种不同的放法?(用K表示)注意:5,1,1和1,5,1是同一种分法
资源推荐
资源详情
资源评论
1
逆波兰表达式
逆波兰表达式
问题描述:
问题描述:
逆波兰表达式是一种把运算符前置的算术表达式,例如
逆波兰表达式是一种把运算符前置的算术表达式,例如
普通的表达式
普通的表达式
2+3
2+3
的逆波兰表示法为
的逆波兰表示法为
+23
+23
。逆波兰表达式的
。逆波兰表达式的
优点是运算符之间不必有优先级关系,也不必用括号改变运
优点是运算符之间不必有优先级关系,也不必用括号改变运
算次序,例如(
算次序,例如(
2+3
2+3
)
)
*4
*4
的逆波兰表示法为
的逆波兰表示法为
*+234
*+234
。本题
。本题
求解逆波兰表达式的值,其中运算符包括
求解逆波兰表达式的值,其中运算符包括
+- * /
+- * /
四个。
四个。
输入数据
输入数据
:
:
输入为一行,其中运算符和运算数之间都用空格分隔,
输入为一行,其中运算符和运算数之间都用空格分隔,
运算数是浮点数。
运算数是浮点数。
输出要求:
输出要求:
输出为一行,表达式的值
输出为一行,表达式的值
输入样例:
输入样例:
* + 11.0 12.0 + 24.0 35.0
* + 11.0 12.0 + 24.0 35.0
输出样例:
输出样例:
1357.000000
1357.000000
2
分析
分析
解题思路:
这个问题看上去有些复杂,如果只是简单地模拟计算步骤不太容
易想清楚,但是如果用递归的思想就非常容易想清楚,让我们根据
逆波兰表达式的定义进行递归求解。在这个递归函数中,针对当前
的输入,有五种情况:
1 、输入是常数,则表达式的值就是这个常数
2 ‘ 、输入的是 + ’ ,则表达式的值是再继续读入两个表达式并计算
出它们的值
3 ‘ 、输入的是 - ’ ;
4 ‘ 、输入的是 * ’ ;
5 ‘ 、输入的是 / ’;
后面几种情况与 2 ‘ 相同,只是计算从 + ’ ‘ 变成 - ’ ‘ * ’
‘ / ’ 。
3
#include <stdio.h>
#include <stdio.h>
#include<math.h>
#include<math.h>
double exp(){
double exp(){
char a[10];
char a[10];
scanf(“%s”,a);
scanf(“%s”,a);
switch(a[0]){
switch(a[0]){
case’+’:return exp()+exp();
case’+’:return exp()+exp();
case’-’:return exp()-exp();
case’-’:return exp()-exp();
case’*’:return exp()*exp();
case’*’:return exp()*exp();
case’/’:return exp()/exp();
case’/’:return exp()/exp();
default:return atof(a);
default:return atof(a);
}
}
}
}
void main()
void main()
{
{
double ans;
double ans;
ans=exp();
ans=exp();
printf(“%f”,ans);
printf(“%f”,ans);
}
}
剩余14页未读,继续阅读
资源评论
qietingfengdeyanse
- 粉丝: 4
- 资源: 10
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功