日期:2014-05-17  浏览次数:20809 次

求个计算问题的算法
本帖最后由 hky5_com 于 2013-03-22 21:54:01 编辑
给个总数A,要在几个数里找出是否累加成A 如果能,则输出这几个数,不能的话就输出0.
如: 总数A =200    几个数为: 5,100,195,10   结果就是输出  5 100  195

 总数A =190    几个数为: 5,100,195,10   结果就是输出  0
几个数 是一个不固定的数组,可能五个,也可以六个

多谢了,计算能力差,请教了

算法

------解决方案--------------------
是否允许数字重复?
比如  5,100,195,10 A =200 输出 100, 100。

如果是不重复,参考
http://bbs.csdn.net/topics/380259947
组合后求和,看有没有符合的。
------解决方案--------------------


    static class Program
    {
        [STAThread]
        static void Main()
        {
            Ar(new int[] { 5, 100, 195, 10 }, 200);
        }
        //先列出递归原理
        //static void Ar(int[] ar, int g)
        //{
        //    int size = ar.Length;
        //    for (int x = 0; x < size; x++)
        //    {
        //        for (int y = x + 1; y < size; y++)
        //        {
        //            for (int z = y + 1; z < size; z++)
        //            {
        //                if (x + y + z == g)
        //                    return true;
        //                else if (x + y + z > g)//结束
        //                    break;
        //                //for (int a = z + 1; a < size; a++)
        //                //...
        //  &nb