C语言里如何写出打入几个数字最后判断出他们的和是不是21?

来源:百度知道 编辑:UC知道 时间:2024/06/15 12:55:14
无论打出多少数字, 只要其中有能加出和为21的就算
比如
打入 20
出来 No combination of the numbers given sums to 21.

打入 10 3 10 1
出来 10 + 10 + 1 = 21

打入 12 1 25 7
出来 No combination of the numbers given sums to 21.

打入 9 13 -1 -10
出来 9 + 13 + -1 = 21

把计算结果排序
新数来的时候 首先去找
它和哪两个以前的结果结合能得到21

有的话 就输出 没有的话 更新结果排序列表
这是动态输入的时候 用的算法

静态和这个类似的

我觉得这个无论打出多少数字还是有问题的,如果数字的个数没有个上限的话,问题不可解。
给出上线的话最简单有效的就是枚举了,由于你的输入数据有负数,所以我觉得其他方法基本不太可靠了。
期待大牛给出优化的算法~~

枚举就是O(2^N),数据少还是可以接受的,毕竟程序可以简单一点。

N大了,可以先排序,O(N*logN),然后从头开始遍历,O(N),程序稍微有点麻烦

这个不难,
有本书叫做编程之美--微软技术面视指南,其中讲到过有关算24点的问题,和你这个有点类似.
你可以去参考一下,具体程序有点复杂,自己加油吧.

25-12+7+1=21...
呵呵如果能这么算就复杂了.

f