泛型组合函数
来源:互联网 发布:2018软件工程硕士在职 编辑:程序博客网 时间:2024/06/05 03:27
根据网络的组合算法改写成的泛型组合函数
/// <summary>
/// 获取不同组合/// </summary>
/// <typeparam name="T">泛型</typeparam>
/// <param name="el">组合的元素列表</param>
/// <param name="n">个数</param>
/// <returns></returns>
public List<T[]> GetCom<T>(T[] el, int n)
{
string s = "";
int p = 0;
int m = el.Length;
int[] flags = new int[m];
List<T[]> oList = new List<T[]>();
for (int i = 0; i < n; i++)
{
flags[i] = 1;
}
for (int i = n; i < m; i++)
{
flags[i] = 0;
}
p = 0;
T[] ArrT = new T[n];
int Arrindex = 0;
for (int i = 0; i < flags.Length; i++)
{
if (flags[i] == 1)
{
p++;
ArrT[Arrindex] = el[i];
Arrindex++;
}
}
oList.Add(ArrT);
int count = 1;
bool has10 = false; //是否有"10"组合的标志:true-有;false-无
int bound = 0; //第一个"10"组合的索引
int num1 = 0; //"10"组合左边的"1"的个数
int j;
while (true)
{
num1 = 0;
has10 = false;
for (int i = 0; i < m - 1; i++)
{
if (flags[i] == 1 && flags[i + 1] == 0)//找到第一个"10"组合
{
bound = i;
flags[i] = 0;//将该"10"组合变为"01"组合
flags[i + 1] = 1;
for (j = 0; j < num1; j++)//将其左边的所有"1"全部移动到数组的最左端
{
flags[j] = 1;
}
for (j = num1; j < bound; j++)
{
flags[j] = 0;
}
has10 = true;
break;
}
else if (flags[i] == 1)
{
num1++;
}
}
if (has10 == false)//没有"10"组合了,代表组合计算完毕
{
break;
}
else
{
count++;
}
p = 0;
T[] tmp_ArrT = new T[n];
int tmp_Arrindex = 0;
for (int i = 0; i < flags.Length; i++)
{
if (flags[i] == 1)
{
p++;
tmp_ArrT[tmp_Arrindex] = el[i];
tmp_Arrindex++;
}
}
oList.Add(tmp_ArrT);
}
return oList;
}
//------------------调用方式
int[] el={1,2,3,4,5};
List<int[]> oList = GetCom<int>(el, 2);
0 0
- 泛型组合函数
- 函数组合
- 组合型母函数程序实现
- C++标准库---组合型仿函数
- STL自定义仿函数和组合型函数适配器
- C#组合函数
- 6.5.1 函数组合
- 组合框函数
- JAVA组合函数Combination
- 组合数学-母函数
- Oracle组合函数
- 6.5.1 函数组合
- C++ 组合函数
- scala函数组合
- JS -- 函数组合
- 泛型与非泛型组合
- 母函数算法---组合数学
- 组合类的构造函数
- 137_leetcode_Implement strStr()
- 传智播客2014 php就业班视频教程
- Qt多国语言国际化
- java实战(九)--------ssh框架搭建的完整例子
- oracle 查询当月的数据
- 泛型组合函数
- 个人计划
- TableRow设置高度
- C#连接oracle数据库操作
- 自定义连接池实现
- MYSQL增删改查和其他常见操作
- Jquery CheckBox、 RadioButton、 DropDownList取值赋值代码
- 查看端口号是否被占用并释放端口
- 无向图欧拉通路