怎么写a+b+c+d+e+f=120呀(120为可变更的值)
求出abcdef所有可行的值..
abcdef的值为1-100之间比如
      a+b+c+d+e+f=10
      1+2+1+1+1+4=10
      2+2+2+2+1+1=10
      ........
不用多个for来循环
在线等.....

解决方案 »

  1.   

    老兄,不用多个for循环怎么做啊
      

  2.   

    ..如果用6个FOR.这种算法也太不好了吧..而且计算量非常大哦..
      

  3.   

    ..如果用6个FOR.这种算法也太不好了吧..而且计算量非常大哦..
    a+b+c+d+e+f=120
    本来得出的结果就比较庞大了
      

  4.   

    class Program
        {
            static void Main(string[] args)
            {
                Combine(120, 5);
                Console.ReadLine();
            }
            static void Combine(int sum, int numCount)
            {
                int[] pos = new int[numCount];
                for (int i = 0; i < pos.Length; i++)
                {
                    pos[i] = i + 1;
                }
                int curNum = numCount - 1;
                while (pos[0] <= sum - numCount)
                {
                    if (pos[curNum] <= sum - (numCount - curNum))
                    {
                        PrintArr(sum, pos);
                        pos[curNum]++;
                    }
                    else
                    {
                        curNum--;
                        if (curNum < 0)
                        {
                            break;
                        }
                    }
                }
            }
            static void PrintArr(int sum, int[] pos)
            {
                for (int i = 0; i < pos.Length ; i++)
                {                if (i == pos.Length - 1)
                    {
                        Console.Write(sum - pos[i]);
                        Console.WriteLine();
                    }
                    else if (i == 0)
                    {
                        Console.Write(pos[i] - 0+"+");
                    }
                    else
                    {
                        Console.Write(pos[i + 1] - pos[i] + "+");
                    }
                }
            }
        }
      

  5.   

    得到所有值用广度优先算法。去google一下,应该有不少。基本思路是:需要走6步,每一步所取的数值是1到100之间,相当于一种可能性的遍历。
      

  6.   

    6 个for绝对不效率,花的时间可能要1分钟以上
    shrinerain(圣影雨)的代码我测试了好像不行啊,甚至有些只出现5个加数的
      

  7.   

    shrinerain(圣影雨)的代码我测试了好像不行啊,甚至有些只出现5个加数的
    ------------------------------------------------------------------
    Sorry, I didn't test it...Modify the while loop, it's OK now...
     while (curNum>=0)
                {
        PrintArr(sum, pos);
                    if (pos[curNum] < sum - (numCount - curNum))
                    {
                        pos[curNum]++;
                    }
                    else
                    {
                        curNum--;
                    }
                }
      

  8.   

    for 用5个就行了吧
    知道前5字值,第六个值肯定是唯一的,减一下就出来了
      

  9.   

    LS 虽然更正了, 但结果很明显是错的
    -------------------------------------
    Why?
    U tried it?
      

  10.   

    matlab也要敲代码列
    ///////////////////////////
    数学建模工具,拿名词唬人呢~
      

  11.   

    给你一个不用for循环的, c++版本,结果(A,B,C,D,E,F,G)是组合的,由于c++打印语句cout比较耗费时间,你可以把结尾为///的语句注释掉,不过这样你就看不到结果了
    #include<iostream>
    using namespace std;
    #define COUNT 6
    #define RESULT 120
    int save[COUNT+1];
    void fun(int nCount,int nStart,int nTotal)
    {
    if(nCount==1)
    {
    save[nCount]=nTotal;///
    for(int i=COUNT;i>1;i--)///
    cout<<save[i]<<"+";///
    cout<<save[1]<<"="<<RESULT<<endl;///
    return;
    }
    for(int i=nStart;i<=nTotal/nCount;i++)
    {
    save[nCount]=i;///
    fun(nCount-1,i,nTotal-i);
    }
    }
    void main()
    {
    fun(COUNT,1,RESULT);
    }
      

  12.   

    mathematica算这种东西应该很快
    不知mathematica的内核是怎么写的,计算非常的快
    尤其大数计算
      

  13.   

    我晕,那些老是说用几个for循环不行的人,你们有什么好的办法吗,有就说出来,不要老是不会装会,说一些摸不着边的话,说点实际的东西好不好啊
      

  14.   

    sorry,上面的程序没有加入 {A,B,C,D,E,F}<100的限制,改下,并加入统计结果数目功能
    #include<iostream>
    using namespace std;#define MIN(a,b) (a<b?a:b)
    #define COUNT 6
    #define RESULT 120
    #define MIN_ 1
    #define MAX_ 100
    int save[COUNT+1];
    int nCountResult; //统计得到结果的数目void fun(int nCount,int nMin,int nMax,int nTotal)
    {
    if(nCount==1)
    {
    if(nTotal<=nMax)
    {
    save[nCount]=nTotal;
         for(int i=COUNT;i>1;i--)
       cout<<save[i]<<"+";
             cout<<save[1]<<"="<<RESULT<<endl;
        nCountResult++;
    } return;
    }
     
    for(int i=nMin;i<=MIN(nTotal/nCount,nMax);i++)
    {
    save[nCount]=i;
    fun(nCount-1,i,nMax,nTotal-i);
    }
    }
    void main()
    {
    fun(COUNT,MIN_,MAX_,RESULT);
    cout<<"结果数目:"<<nCountResult<<endl;
    }
      

  15.   

    上面的算法很快的,34w个结果1秒就出来了,但如果想显示的话就不一样了,显示耗资源耗时间,所以会慢上n倍(n>100)