C# 组合算法
来源:互联网 发布:2018软件工程硕士在职 编辑:程序博客网 时间:2024/06/02 17:35
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
public partial class Default15 : System.Web.UI.Page
{
protected void Page_Load(object sender, EventArgs e)
{
int[] el = { 1, 2, 3, 4,5};
this.Response.Write(GetCom<int>(el, 3));
}
public string GetCom<T>(T[] el, int n)
{
string s = "";
int p = 0;
int m = el.Length;
int[] flags = new int[m];
string str = "";
for (int i = 0; i < n; i++)
{
flags[i] = 1;
}
for (int i = n; i < m; i++)
{
flags[i] = 0;
}
p = 0;
for (int i = 0; i < flags.Length; i++)
{
if (flags[i] == 1)
{
p++;
string t = "";
if (p < n)
{
t = ",";
}
s += el[i].ToString()+t;
}
str += flags[i].ToString();
}
str += ";";
s = s + "<br/>";
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;
for (int i = 0; i < flags.Length; i++)
{
if (flags[i] == 1)
{
p++;
string t = "";
if (p < n)
{
t = ",";
}
s += el[i].ToString() + t;
}
str += flags[i].ToString();
}
str += ";";
s = s + "<br/>";
}
string[] sa = str.Split(';');
str ="";
Array.Sort(sa);
for (int i = sa.Length-1; i >0 ; i--)
{
string tempS = "";
if (i > 1)
{
tempS = ";";
}
str += sa[i] + tempS;
}
/*重新排序*/
string[] numA = str.Split(';');
string tempnum = "";
foreach (string ss in numA)
{
for (int jj=0;jj<ss.Length; jj++)
{
if (ss[jj] == '1')
{
tempnum += el[jj].ToString() + ",";
}
}
tempnum += "<br/>";
}
return tempnum;
}
}
- c#组合算法整理
- C#组合算法
- 排列 组合 算法 C#
- C# 组合算法
- c#组合算法
- C#组合的递归算法
- c#全排列 和 组合算法
- 基于C#的排列和组合算法
- C# 有放回(重复)组合算法
- 算法练习 -- DP C# 实现 全组合算法
- 全排列和组合算法的C#语言实现
- 组合算法
- 组合算法
- 组合算法
- 组合算法
- 组合算法
- 组合算法
- 组合算法
- 退役笔记N#MySQL = lambda sql : sql + ' Source Code 4 MySQL Hash '
- Django--manage.py命令大全
- 211-985院校名单
- 顶尖互联网产品经理必须具备的6大能力
- Android Fragment 真正的完全解析(上)
- C# 组合算法
- struts2中<jsp:forward>跳转时报404错误的问题
- Matlab pbs script
- tomcat中jar包加载顺序
- 每天进步一点点——负载均衡之IP
- 添加nginx为系统服务(service nginx start/stop/restart)
- 用DNSCrypt解决DNS污染造成的Dropbox无法连接问题
- 137_leetcode_Implement strStr()
- 传智播客2014 php就业班视频教程