bigsea232 发表于 2012-9-3 17:02:56

C语言程序设计的一个小疑问

计算24的问题    要求:在屏幕上输入1-10范围内4个整数(可以有重复),对它们进行加减乘除四则运算后(可以任意的加括号限定计算的优先级),寻找计算结果等于24的表达式


上面是老师布置的课程设计 C语言盲表示毫无头绪@35# 求大家帮帮忙 给个提示就好@27# 先谢过大家了~

Lucky---seven 发表于 2012-9-3 17:24:33

这个不是小问题了吧,我嘞个神,上学的时候还真推敲过介个,但是貌似木有什么好的方法,晚上理一下思路给你,不过编程的东西都还给老师了已经,估计帮不了忙了啊咩~

bigsea232 发表于 2012-9-3 17:27:06

Lucky---seven 发表于 2012-9-3 17:24 static/image/common/back.gif
这个不是小问题了吧,我嘞个神,上学的时候还真推敲过介个,但是貌似木有什么好的方法,晚上理一下思路给你 ...

太感谢了!!!!@85#

托托 发表于 2012-9-3 18:46:11

我去。。。好复杂

cztianshi 发表于 2012-9-3 19:20:08

这个真的已经不是小问题了。。。@24#你们老师真够厉害的。。。

cztianshi 发表于 2012-9-3 19:35:35

http://bbs.chinaunix.net/thread-1002909-1-1.html 这个是我以前参考过的一篇算法文章,楼主可以试一下,就结果来说算法1就可以了,但是效率不高,楼主可以自己尝试一下文章中的另外两种方法(话说有代码哦@25#)

foodszhu 发表于 2012-9-3 20:23:56

4个数字顺序能变么?能变更好穷举一些。。。

bigsea232 发表于 2012-9-4 09:30:32

cztianshi 发表于 2012-9-3 19:35 static/image/common/back.gif
http://bbs.chinaunix.net/thread-1002909-1-1.html 这个是我以前参考过的一篇算法文章,楼主可以试一下, ...

嗯 我到你给的网站上面看了一下 算法1

function f(S)
begin
1.if |S| < 2
2.    then return S
3.    else begin
4.         T ← Φ
5.         for each (r1, r2) in S do
6.         begin
7.             r ← r1 + r2;
8.             T ← T + f(S – {r1, r2} + {r});
9.             r ← r1 - r2;
10.            T ← T + f(S – {r1, r2} + {r});
11.            r ← r1 * r2;
12.            T ← T + f(S – {r1, r2} + {r});
13.            if (r2 <> 0) and (r1 mod r2 = 0) then
14.            begin
15.            r ← r1 / r2;
16.            T ← T + f(S – {r1, r2} + {r});
17.            end
18.          end
19.          return T;
20.   end
end

我想说这个代码不是C吧 并且我看不懂(好吧,其实我数学原理就没懂) 那个帖子的题目和我的还是有些小不同的
1.我的数字使用1~10,它使用1~9
2.我的数字可以重复用,它的只能用一次

天啊 到底应该怎么解啊~思路都木有@84#

cztianshi 发表于 2012-9-4 09:57:22

bigsea232 发表于 2012-9-4 09:30 static/image/common/back.gif
嗯 我到你给的网站上面看了一下 算法1

function f(S)


#7134!这个是伪代码来着。。。楼主不知道伪代码是什么么?   往下继续看,有C的代码

cztianshi 发表于 2012-9-4 10:01:40

再者,这个算法可以直接套用到你这个题目上,只是限定范围和数字个数在编程的时候改动一下就可以了,而且这个算法的核心就是
“要计算集合S中的元素通过四则混合运算所能得到的所有值,我们只需
要任取 S 中的两个元素 r1 , r2 ,分别计算 r1 , r2 的加减乘除运算,然后用
所得的结果与 S 中剩下的其他数字进行四则混合运算。只要取遍所有的 r1 ,
r2 ,最后得到的所有结果的并集就是 S 中的元素通过四则混合运算所能得到的所
有值的集合。”
编程过程中根本不需要涉及到重复数的问题

最后提醒楼主,想要学好编程,看不懂数学原理和伪代码,是不可能的

foodszhu 发表于 2012-9-4 12:13:09

楼主的意思难道是这四个数字可以反复使用么,可重复的意思只是还是四个数字吧。。。就是简单穷举就好了只有4个数不需太多优化。。枚举排列顺序和之间的运算符,最后再加括号

只是微微一笑 发表于 2012-9-11 22:43:28

这个还好吧

等小白 发表于 2012-9-12 18:20:58

太感谢了!!我也懂了

qianpeiyu 发表于 2012-9-14 14:08:12

foodszhu 发表于 2012-9-3 20:23 static/image/common/back.gif
4个数字顺序能变么?能变更好穷举一些。。。

撞头像了=3=

龙小子 发表于 2012-9-14 23:25:15

受教了。这个算法,,,,哎,想不到
页: [1]
查看完整版本: C语言程序设计的一个小疑问