一个求和的算法,算法高手请进
求数值在   1   -   50   之内的任意5个数之和为100   。   
 数值:1,2,3,4,5,6....48,49,50 
 取其中的任意5个数,但这5个数相加之和要等于100,并将所有这种组合罗列 
 例:   1+10+19+20+50=100 
                3+14+16+27+40=100
------解决方案--------------------最笨的方法来了,呵呵   
 for(int i=1;i <=50;i++) 
 { 
 	//求4个数之和等于100-i(排除i) 
 	for(int j=1;j <=50;j++) 
 	{ 
 		//求3个数之和等于100-i-j(排除ij) 
 		for(int k=1;k <=50;k++) 
 		{ 
 			//求2个数之和等于100-i-j-k(排除ijk) 
 			for(int m=1;m <=50;m++) 
 			{ 
 				//找某个数等于100-i-j-k-m(排除ijkm) 
 			} 
 		} 
 	} 
 }
------解决方案--------------------给你个 我想的 先从数学上来看 
 考虑 20 20 20 20 20 
 可以看出 第一个数 最大只能是18, 即18,19,20,21,22 
 那么考虑后面的数都相对第一个递增. 
 可以得到下面的算法.(无重复)   
 System.Text.StringBuilder sb = new System.Text.StringBuilder(); 
             for(int ia=1; ia <=18; ia++) 
             { 
                 for(int ib=ia+1; ib <=50; ib++) 
                 { 
                     for(int ic=ib+1; ic <=50; ic++) 
                     { 
                         for(int id=ic+1; id <=50; id++) 
                         { 
                             for(int ie=id+1; ie <=50; ie++) 
                             { 
                                 if((ia+ib+ic+id+ie)== 100) 
                                 { 
                                     //Console.Write( "{0},{1},{2},{3},{4}\r\n ", ia,ib,ic,id,ie); 
                                     //Console.WriteLine( "---------- "); 
                                     sb.Append(ia +  ", " + ib +  ", " + ic+  ", " + id +  ", " + ie +  "\r\n ");                                   
                                 } 
                             } 
                         } 
                     } 
                 } 
             } 
             //Console.ReadLine();             
             System.IO.StreamWriter writer1 = new System.IO.StreamWriter( "d:\\test.txt ", true, Encoding.Default); 
             writer1.Write(sb.ToString()); 
             writer1.Close();