题目
把某个数组中,数组项相加为m的组合输出,如数组[1,2,4,5,6],相加为11的组合有[5,6],[1,4,6],[2,4,5]。
代码(试例)
这个是针对11的
using System;
using System.Collections.Generic;
public class Test
{
public static void Main()
{
int []a=new int[]{1,2,4,5,6};
int num=11,num1,k;//num为定值,num1为索引间隔
List<int> list=new List<int>();//存放符合条件的索引
for(int i=0;i< a.Length;i++)
{
num=11;
list.Clear();//每次重新循环,list都要清空
if(a[i]==num)
{
Console.WriteLine(a[i]);
continue;
}
if(a[i]>num)
{
break;
}
list.Add(a[i]);
num-=a[i];
num1=1;
while(num1+i<a.Length)//遍历所有组合
{
for(int j=i+num1;j<a.Length;j++)
{
for( k=j;k<a.Length;k++)
{
if(a[k]==num)
{
list.Add(a[k]);
break;
}
}
if(k<a.Length)//说明找到了符合条件的组合,则输出该组合
{
foreach(int n in list)
{
Console.Write(n);
}
Console.WriteLine();
break;
}
num-=a[j];
list.Add(a[j]);
}
num1++;//间隔加1
list.Clear();//需要重新开始寻找了
num=11-a[i];
list.Add(a[i]);
}
}
}
}