社区
C++ 语言
帖子详情
四個數的算數運算
shine2000
2005-09-02 10:44:26
任意輸入0-9之間的四個數(不能重復),然後對四個數進行+ - * / 任意運算,如果運算結果在1-49之間就輸出。不知道有什麼好的算法沒
...全文
254
19
打赏
收藏
四個數的算數運算
任意輸入0-9之間的四個數(不能重復),然後對四個數進行+ - * / 任意運算,如果運算結果在1-49之間就輸出。不知道有什麼好的算法沒
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用AI写文章
19 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
zwl327
2005-09-05
打赏
举报
回复
用遍历,不过剪枝函数上可以研究一下,以提高效率,
packe_peng_520
2005-09-05
打赏
举报
回复
up
peterx_xin
2005-09-05
打赏
举报
回复
有点难………………
顶一下!
希望之晨
2005-09-04
打赏
举报
回复
有点难,帮你定下.
shine2000
2005-09-04
打赏
举报
回复
up
hoya5121
2005-09-03
打赏
举报
回复
记得好像用树比较方便,把数字和符号压到树里。。。记不清楚了。。
shine2000
2005-09-03
打赏
举报
回复
不用加括號啊,需要考慮運算符號的優先集
shine2000
2005-09-03
打赏
举报
回复
沒人幫忙看下嗎,具體點啊
shine2000
2005-09-03
打赏
举报
回复
那個寫個代碼看下啊
mituzhishi
2005-09-03
打赏
举报
回复
当然是穷举法了
shine2000
2005-09-03
打赏
举报
回复
有人給個詳細點的算法嗎
wzjall
2005-09-02
打赏
举报
回复
自己改改吧
我的可以计算"任意"的四则运算. +-*/()
你的当然也能行
wzjall
2005-09-02
打赏
举报
回复
#pragma warning(disable:4786)
#include<string>
#include<map>
#include<stack>
#include<iostream>
#include<ctype.h>
using namespace std;
void main()
{
map<string, char>table;
table["++"]='>';
table["+-"]='>';
table["+*"]='<';
table["+/"]='<';
table["+("]='<';
table["+)"]='>';
table["+#"]='>';
table["-+"]='>';
table["--"]='>';
table["-*"]='<';
table["-/"]='<';
table["-("]='<';
table["-)"]='>';
table["-#"]='>';
table["*+"]='>';
table["*-"]='>';
table["**"]='>';
table["*/"]='>';
table["*("]='<';
table["*)"]='>';
table["*#"]='>';
table["/+"]='>';
table["/-"]='>';
table["/*"]='>';
table["//"]='>';
table["/("]='<';
table["/)"]='>';
table["/#"]='>';
table[")+"]='>';
table[")-"]='>';
table[")*"]='>';
table[")/"]='>';
table["))"]='>';
table[")#"]='>';
table["(+"]='<';
table["(-"]='<';
table["(*"]='<';
table["(/"]='<';
table["(("]='<';
table["()"]='=';
table["#+"]='<';
table["#-"]='<';
table["#*"]='<';
table["#/"]='<';
table["#("]='<';
table["##"]='=';
stack<float> num;
stack<char> alp;
alp.push('#');
string s="35*10*50";
s+='#';
int i=0;
char c=s[i++];
int tag=0;
while(c!='#'||alp.top()!='#')
{
if(isdigit(c))
{
char d=s[i];
tag++;
if(isdigit(d))
{
num.push((float)c-48);
}
else
{
num.push((float)c-48);
float n=1,m=0;
for(int j=tag;j>0;j--)
{
m=num.top()*n+m;
n=n*10;
num.pop();
}
num.push(m);
tag=0;
}
//num.push((float)c-48);//字符转数字
c=s[i++];
}
else
{
string s1;
s1+=alp.top();
s1+=c;
char c1=table[s1];
switch(c1)
{
case'<':
alp.push(c);
c=s[i++];
break;
case'=':
alp.pop();
c=s[i++];
break;
case'>':
float y=num.top();
num.pop();
float x=num.top();
num.pop();
char c2=alp.top();
alp.pop();
switch(c2)
{
case'+':
x=x+y;
break;
case'-':
x=x-y;
break;
case'*':
x=x*y;
break;
case'/':
x=x/y;
break;
}
num.push(x);
cout<<num.top()<<endl;
break;
}
}
}
cout<<num.top();
}
myhouwei
2005-09-02
打赏
举报
回复
需考虑优先级不,比如先乘除后加减,或则可以人为加括号不?
xiaocaizi
2005-09-02
打赏
举报
回复
穷举的办法
用个四元组表示四个运算符号
(op1,op2,op3,op4)
op1...op2..op3..op4都可以取+ -* / 算出每种组合的结果就可以了
共有256种情况
shine2000
2005-09-02
打赏
举报
回复
不是啊 就是任意輸入四個數 比如 3 5 7 9 就像玩24點一樣啊 就這4個數做運算就好了
3+5+7+9 = 24 結果1<= 24 <= 49 輸出 3 +5* 7/ 9 = ........
snowbirdfly
2005-09-02
打赏
举报
回复
应该算吧~
这样就情况比较多~~
想一下~
先顶一下~~
xiaocaizi
2005-09-02
打赏
举报
回复
假如输入的是1,2,3,4
1)这四个数字是不是一定要用上?
比如 1+2=3 算吗
2)这四个数字可否重复用?
比如
1+2+3+4+4+3+2+1=20 算吗
SUPERSYB
2005-09-02
打赏
举报
回复
用回逆法,只有四个数用递归也来得快!!
什么是算术运算?什么是关系运算?什么是逻辑运算?
算术运算 算术运算:用于各类数值运算.包括加(+)、减(-)、乘(*)、除(/)、求余(或称模运算,%)、自增(++)、自减(–)共七种. 算术运算简称运算。 指按照规定的法则和顺序对式题或算式进行运算,并求出结果的过程。包括:加法、减法、乘法、除法、乘方、开方等几种运算形式。 其中加减为一级运算,乘除为二级运算,乘方、开方为三级运算。在一道算式中,如果有几级运算存在,则应先进行高级运算,再进行...
数字逻辑——逻辑运算和算术运算
控制信号控制对两个输入数据A,B的逻辑运算和算术运算
无符号二进制数的算术运算
无符号二进制数的算术运算 本文内容参考自王达老师的《深入理解计算机网络》一书&amp;amp;amp;amp;amp;amp;lt;中国水利水电出版社&amp;amp;amp;amp;amp;amp;gt; 一、无符号二进制数的运算规则: 无符号二进制数的加、减、乘、除四则算数运算法则其实与十进制数的四则算数运算法则是一一对应的。如果你理解了十进制的四则算数运算法则,那么理解无符号二进制数的四则运算相对来讲就很简单了 –引用自王达老师《深入理解计算机网络》一书 1、加法
计算机逻辑运算与算术运算,计算机的计算指的是算术运算和逻辑运算,是这样的吗...
没错!计算机的计算指的就是算术运算和逻辑运算。运算器:arithmeticunit,计算机中执行各种算术和逻辑运算操作的部件。运算器的基本操作包括加、减、乘、除四则运算,与、或、非、异或等逻辑操作,以及移位、比较和传送等操作,亦称算术逻辑部件(ALU)。运算器由算术逻辑单元(ALU)、累加器、状态寄存器、通用寄存器组等组成。算术逻辑运算单元(ALU)的基本功能为加、减、乘、除四则运算,与、或、非、...
linux 算术命令,shell中进行算术运算的各种方法
shell中,无法直接进行算术运算,如果直接进行算术运算会出现如下情况。从上图可以看出,默认情况下,shell不会直接进行算术运算,而是把”算术符号”当做”字符串”与两个变量的值连接在了一起,形成了一个新的字符串,那么,在bash中,应该怎样进行算术运算呢?细分之下,常用方法有6种,如下。此处先对各种方法进行概述,后续会针对每种方法给出示例。(1) 使用let命令进行算术运算,只支持整数运算。(2...
C++ 语言
65,210
社区成员
250,518
社区内容
发帖
与我相关
我的任务
C++ 语言
C++ 语言相关问题讨论,技术干货分享,前沿动态等
复制链接
扫一扫
分享
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++
技术论坛(原bbs)
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
请不要发布与C++技术无关的贴子
请不要发布与技术无关的招聘、广告的帖子
请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下
试试用AI创作助手写篇文章吧
+ 用AI写文章