社区
数据结构与算法
帖子详情
求解小学奥数算法
柯本
2003-04-30 08:54:21
有一小学奥数题:
用2,3,4,5,6及+,-,*,/算出1,每个数字及运算符只能用一次
可以用任意个(),要求得出所有结果(有多个)
如:
5-(3*4/6+2)
4*6/(5+3)-2
-------------------------------------
(最好是C或PASCAL的源程序)
...全文
103
9
打赏
收藏
求解小学奥数算法
有一小学奥数题: 用2,3,4,5,6及+,-,*,/算出1,每个数字及运算符只能用一次 可以用任意个(),要求得出所有结果(有多个) 如: 5-(3*4/6+2) 4*6/(5+3)-2 ------------------------------------- (最好是C或PASCAL的源程序)
复制链接
扫一扫
分享
转发到动态
举报
AI
作业
写回复
配置赞助广告
用AI写文章
9 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
柯本
2003-04-30
打赏
举报
回复
ZhangYv说的对,光5!*4!是不够的
ZhangYv
2003-04-30
打赏
举报
回复
其实求结果好做,输出括号是个大麻烦...
BlueSky2008
2003-04-30
打赏
举报
回复
穷举
mathe
2003-04-30
打赏
举报
回复
5!*4!才2880,穷举
ZhangYv
2003-04-30
打赏
举报
回复
有限自动机......faint
柯本
2003-04-30
打赏
举报
回复
能否再改进一下?
mathe
2003-04-30
打赏
举报
回复
好像还有重复的表达式,主要是表达式的等价性很难定义:
比如(5+2-4*6/3)
也可以代表5+2-(4*6)/3,也可以是5+2-4*(6/3)等不同的表达式
mathe
2003-04-30
打赏
举报
回复
27组解(加法和乘法交换意义下相同的解已经淘汰。不过也一些解结果可能是-1
那么只需要将减号左右的数值交换一下就可以了。(比如5/(4+3-6*2) 需要变为5/(6*2-(4+3)).
如果还要重复计数加法和乘法交换率后的解,就有27*4=108组。
5/(4+3-6*2)
(4+3-6*2)/5
4/(5+3-6*2)
(5+3-6*2)/4
3/(6+5-4*2)
(6+5-4*2)/3
3/(5+4-6*2)
(5+4-6*2)/3
(5+4)/(3-6*2)
(3-6*2)/(5+4)
(5+3)/(4-6*2)
(4-6*2)/(5+3)
(4+3)/(5-6*2)
(5-6*2)/(4+3)
4*2/(6+5-3)
4*2/(5+6-3)
4*(5-3)/(6+2)
(5-3*(6+2)/4)
(4-(3+6*2)/5)
(3-(6+5*2)/4)
(3-2*(6+4)/5)
(2-6*4/(5+3))
(6+3-5*4/2)
(6+3-4*5/2)
(5+2-6*4/3)
(5+2-4*6/3)
(5+6/3-4*2)
Total 27 expressions
程序直接使用 http://members.lycos.co.uk/huidu/club/bbsread.php?bbsid=529fcbdc142304ab 下的c++代码,
添加函数:
void tree_iterator::stat_op(int d[])const
{
int i;
int pi,mi;
if(first_child==NULL)return;
tree_iterator *child=first_child;
if(get_prod){
pi=2; // *
mi=3; // /
}else{
pi=0; // +
mi=1; // -
}
d[pi]--;
for(i=0;i<spliter.get_sub_group_count();++i)
{
if(pattern&(1<<i)){
d[pi]++;// *
}else{
d[mi]++;// /
}
child->stat_op(d);
child=child->next_sibling;
}
}
修改main为
int main()
{
int a[5]={2,3,4,5,6};
int count=0;
int d[4];
int cur_scan=0;
{
tree_iterator it(5,a,1);
do
{
d[0]=d[1]=d[2]=d[3]=0;
it.stat_op(d);
if(d[0]!=1||d[1]!=1||d[2]!=1||d[3]!=1)
continue;
if(it.get_value().is_integer()){
int value=it.get_value().get_integer();
if(value==1){
cout<<it.expression()<<endl;
count++;
}
}
}while(it.inc());
}
{
tree_iterator it(5,a,0);
do
{
d[0]=d[1]=d[2]=d[3]=0;
it.stat_op(d);
if(d[0]!=1||d[1]!=1||d[2]!=1||d[3]!=1)
continue;
if(it.get_value().is_integer()){
int value=it.get_value().get_integer();
if(value==1){
cout<<it.expression()<<endl;
count++;
}
}
}while(it.inc());
}
cout << "Total " << count << string(" expressions") << endl;
return 0;
}
FishCrazy
2003-04-30
打赏
举报
回复
那么小学生会怎么做呢?:)
小学
奥数
30个经典题型.docx
4. 代数:代数是数学的基础,
小学
奥数
中的代数问题包括简单的方程
求解
、函数概念的初步接触、等差数列和等比数列的理解与应用等。例如,通过列方程解决实际问题,或者找到数列的通项公式。 5. 植树问题:这是一种...
94、
小学
奥数
_7830求小数的某一位(2020.03.18)a.pdf
小学
奥数
涉及的小数位
求解
问题,主要考察了基本的数学知识和逻辑思维能力。具体来说,当我们需要
求解
一个循环小数的某一位时,需要利用到取余数(%)和除法(/)等基本运算。在编程实现过程中,涉及到的主要知识点有...
小学
奥数
知识点梳理【编辑版】.doc
小学
奥数
涵盖了许多重要的数学概念,对于培养孩子的逻辑思维和问题解决能力有着重要作用。以下是针对
小学
奥数
知识点的详细梳理: 一、计算方面 1. 四则混合运算:掌握运算顺序,即先乘除后加减,以及优先处理括号内...
优秀资料(2021-2022年收藏)
小学
数学
奥数
.doc
小学
数学
奥数
是一种针对
小学
生进行数学能力提升的特殊教学方式,它涵盖了数学的多个领域,如算术、几何、逻辑推理等。以下是一些从题目中提取的知识点及其详细解释: 1. **比例与比例计算**: - 第1题中,通过分析...
小学
奥数
举一反三(四年级)全.doc
小学
四年级
奥数
举一反三系列教材涵盖了多种数学思维训练和问题解决技巧,旨在提升孩子们的逻辑推理、计算能力和应用知识解决实际问题的能力。这些课程包括但不限于找规律、简单推理、应用题、算式谜、最优化问题、...
数据结构与算法
33,027
社区成员
35,335
社区内容
发帖
与我相关
我的任务
数据结构与算法
数据结构与算法相关内容讨论专区
复制链接
扫一扫
分享
社区描述
数据结构与算法相关内容讨论专区
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章