C语言程序设计的一个小疑问
计算24的问题 要求:在屏幕上输入1-10范围内4个整数(可以有重复),对它们进行加减乘除四则运算后(可以任意的加括号限定计算的优先级),寻找计算结果等于24的表达式上面是老师布置的课程设计 C语言盲表示毫无头绪@35# 求大家帮帮忙 给个提示就好@27# 先谢过大家了~
这个不是小问题了吧,我嘞个神,上学的时候还真推敲过介个,但是貌似木有什么好的方法,晚上理一下思路给你,不过编程的东西都还给老师了已经,估计帮不了忙了啊咩~ Lucky---seven 发表于 2012-9-3 17:24 static/image/common/back.gif
这个不是小问题了吧,我嘞个神,上学的时候还真推敲过介个,但是貌似木有什么好的方法,晚上理一下思路给你 ...
太感谢了!!!!@85# 我去。。。好复杂 这个真的已经不是小问题了。。。@24#你们老师真够厉害的。。。 http://bbs.chinaunix.net/thread-1002909-1-1.html 这个是我以前参考过的一篇算法文章,楼主可以试一下,就结果来说算法1就可以了,但是效率不高,楼主可以自己尝试一下文章中的另外两种方法(话说有代码哦@25#) 4个数字顺序能变么?能变更好穷举一些。。。 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# bigsea232 发表于 2012-9-4 09:30 static/image/common/back.gif
嗯 我到你给的网站上面看了一下 算法1
function f(S)
#7134!这个是伪代码来着。。。楼主不知道伪代码是什么么? 往下继续看,有C的代码 再者,这个算法可以直接套用到你这个题目上,只是限定范围和数字个数在编程的时候改动一下就可以了,而且这个算法的核心就是
“要计算集合S中的元素通过四则混合运算所能得到的所有值,我们只需
要任取 S 中的两个元素 r1 , r2 ,分别计算 r1 , r2 的加减乘除运算,然后用
所得的结果与 S 中剩下的其他数字进行四则混合运算。只要取遍所有的 r1 ,
r2 ,最后得到的所有结果的并集就是 S 中的元素通过四则混合运算所能得到的所
有值的集合。”
编程过程中根本不需要涉及到重复数的问题
最后提醒楼主,想要学好编程,看不懂数学原理和伪代码,是不可能的 楼主的意思难道是这四个数字可以反复使用么,可重复的意思只是还是四个数字吧。。。就是简单穷举就好了只有4个数不需太多优化。。枚举排列顺序和之间的运算符,最后再加括号 这个还好吧 太感谢了!!我也懂了 foodszhu 发表于 2012-9-3 20:23 static/image/common/back.gif
4个数字顺序能变么?能变更好穷举一些。。。
撞头像了=3= 受教了。这个算法,,,,哎,想不到
页:
[1]