日期:2014-05-18  浏览次数:20737 次

测试一下你的编程思想。。
求M个数字中的N个数字的排列组合,如输入一组数字为:1   2   3   4   5,求其中3个的排列组合,输出:1 2 3,1 2 4,1 2 5,1 3 4,1 3 5,1 4 5,2 3 4,2 3 5,2 4 5,3 4 5
如果随便输入的一组数字,并输入一个在这组数字长度内的数字,输出它们的排列组合,会的把你们写的代码贴上来。。。看一下你们的编程思想。。。。

------解决方案--------------------
http://www.google.com/search?hl=en&q=combination+algorithm

http://www.codeproject.com/cpp/CombC.asp
------解决方案--------------------
这是一个组合的问题吧。
M个数是可能是没有规律,但是把M个数据赋值给一个大小为M的数组,就能对M个数进行组合。
比如说:2,4,9,10;4个数字。取两个两个的组合。//设为D[]={2,4,9,10}
2,4 2,9, 2,10 //D[0],D[1] D[0],D[2] D[0],D[3]
4,9 4,10 //D[1],D[2] D[1],D[3]
9,10 //D[2],D[3]


//C#:
static void FunctionA(int[] data, int N)
{
Console.WriteLine( "M has {0} members;N is {1}.\n ",data.Length,N);


for (int i = 0; i < data.Length - N + 1; i++)
{

for (int j = i; j < data.Length - N + 1;j++ )
{
if (j != i)
Console.Write( " ; ");
Console.Write( "{0} ",data[i]);
for (int k = 1; k < N; k++)
//输出单个N数组。因为前面已经把第一个数字输出。
//后面只输出N-1个数
{
Console.Write( "{0} ", data[j+k]);

}


}
Console.Write( "\n ");
}

}


------解决方案--------------------
public void CombinationCollocate(
string ANumbers,
string APath,
int ALen)
{
if (APath.Length > = ALen)
{
Console.WriteLine(APath);
return;
}
for (int i = 0; i < ANumbers.Length; i++)
{
string vNumbers = ANumbers.Remove(i, 1);
CombinationCollocate(vNumbers, APath + ANumbers.Substring(i, 1), ALen);
}
} /* CombinationCollocate */

private void button1_Click(object sender, EventArgs e)
{
CombinationCollocate( "12345 ", " ", 3);
}


-------
123
124
125
132
134
135
142
143
145
152
153
154
213
214
215
231
234
235
241
243
245
251
253
254
312
314
315
321
324
325
341
342
345
351
352
354
412
413
415
421
423
425
431
432
435
451
452
453
512
513
514
521
523
524
531
532
534
541
542
543