/// <summary>
/// 长度为n的数组中取m个元素组合
/// </summary>
/// <param name="data"></param>
/// <param name="m"></param>
/// <returns>空格分开的各个组合(每个组合用‘+’连接)</returns>
private string GetMNZhuHe(string[] data, int m)
{
string ZhuHeSum = "";
int n = data.Length;
int min = (0x01 << m) - 1;//00111111
int max = min << (n - m);//11111100
int j;
int k;
for (int i = min; i <= max; i++)
{
j = 0;
k = i;
while (k > 0)
{
j += (int)(k & 0x01);
k >>= 1;
if (j > m)
{
break;
}
}
if (j == m)
{
k = 0x01;
string sum_zuhe = "";
for (int l = n - 1; l >= 0; l--)
{
if ((k & i) == k)
{
if (sum_zuhe == "")
{
sum_zuhe = data[l];
}
else
{
sum_zuhe += "+" + data[l];
}
}
k <<= 1;
}
ZhuHeSum += sum_zuhe + " ";
}
}
return ZhuHeSum.Trim();
}
/// 长度为n的数组中取m个元素组合
/// </summary>
/// <param name="data"></param>
/// <param name="m"></param>
/// <returns>空格分开的各个组合(每个组合用‘+’连接)</returns>
private string GetMNZhuHe(string[] data, int m)
{
string ZhuHeSum = "";
int n = data.Length;
int min = (0x01 << m) - 1;//00111111
int max = min << (n - m);//11111100
int j;
int k;
for (int i = min; i <= max; i++)
{
j = 0;
k = i;
while (k > 0)
{
j += (int)(k & 0x01);
k >>= 1;
if (j > m)
{
break;
}
}
if (j == m)
{
k = 0x01;
string sum_zuhe = "";
for (int l = n - 1; l >= 0; l--)
{
if ((k & i) == k)
{
if (sum_zuhe == "")
{
sum_zuhe = data[l];
}
else
{
sum_zuhe += "+" + data[l];
}
}
k <<= 1;
}
ZhuHeSum += sum_zuhe + " ";
}
}
return ZhuHeSum.Trim();
}