任务排列(救命) 有四个任务a、b、c、d,要求得到这四个任务的全排列:如abcd、abdc等等。如何实现。急! 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 这里不能够使用四个for循环来实现,因为任务的数目是不确定的。 abcdabdcacbdacdbadbcadcbbacdbadcbcadbcdabdacbdcacabdcadbcbadcbdacdabcdbadabcdacbdbacdbcadcabdcba------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("abcd", "", 4);} 摘录:《程序员秘书》--源代码--字符、字符串、文本--字符及对象的排列组合private int num = 1;//序号private string[] Strs;//字符串数组private void button2_Click(object sender, EventArgs e){ num = 1; richTextBox1.Clear(); Strs = textBox2.Text.Split(new string[]{" "," "},StringSplitOptions.RemoveEmptyEntries);//这里可以将字符串换成 任何类型的对象 string str = "";//排列的字符串 for (int i = 0; i < Strs.Length; i++) str += (char)i; if (str.Length > 0) { int total = 1; for (int i = 1; i <= str.Length; i++) total *= i; richTextBox1.AppendText(textBox2.Text + " 排列组合总数:" + total + "\n"); ArrayStrs(str, "", str.Length);//字符串递归排列组合 }}private void ArrayStrs(string str, string arrstr, int strlen)//字符串递归排列组合{ if (arrstr.Length == strlen) { string temp = ""; for (int i = 0; i < arrstr.Length; i++) temp += Strs[(int)arrstr[i]] + " "; richTextBox1.AppendText(num++.ToString().PadRight(6, ' ') + temp + "\n"); return; } for (int i = 0; i < str.Length; i++) { string strsub = str.Remove(i, 1);//删除第一个字符 ArrayStrs(strsub, arrstr + str.Substring(i, 1), strlen);//字符串递归排列组合 }}立即成为编程经验丰富的程序员不是梦,详见http://www.psec.net.cn http://www.codeproject.com/cs/algorithms/combinations.asp 求教提示(指定的转换无效)怎么解决 主板没挂软驱,Directory.GetLogicalDrives还会得到A盘符 long型怎样转成byte[] 型 DataTable中记录的读取问题 c#与access数据库怎么连接 哪位高手帮我把这段代码改成C#,写在C#的事件里面 关于文件上传并把文件的路径传入数据库 问题一大堆,书本练习题,求解答! c#的问题! 建了一个C#群,3589554 javascript 在C#.net2005 web开发中的应用 数组问题
abdc
acbd
acdb
adbc
adcb
bacd
badc
bcad
bcda
bdac
bdca
cabd
cadb
cbad
cbda
cdab
cdba
dabc
dacb
dbac
dbca
dcab
dcba
------
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("abcd", "", 4);
}
private int num = 1;//序号
private string[] Strs;//字符串数组
private void button2_Click(object sender, EventArgs e)
{
num = 1;
richTextBox1.Clear();
Strs = textBox2.Text.Split(new string[]{" "," "},StringSplitOptions.RemoveEmptyEntries);//这里可以将字符串换成 任何类型的对象
string str = "";//排列的字符串
for (int i = 0; i < Strs.Length; i++)
str += (char)i;
if (str.Length > 0)
{
int total = 1;
for (int i = 1; i <= str.Length; i++)
total *= i;
richTextBox1.AppendText(textBox2.Text + " 排列组合总数:" + total + "\n");
ArrayStrs(str, "", str.Length);//字符串递归排列组合
}
}
private void ArrayStrs(string str, string arrstr, int strlen)//字符串递归排列组合
{
if (arrstr.Length == strlen)
{
string temp = "";
for (int i = 0; i < arrstr.Length; i++)
temp += Strs[(int)arrstr[i]] + " ";
richTextBox1.AppendText(num++.ToString().PadRight(6, ' ') + temp + "\n");
return;
}
for (int i = 0; i < str.Length; i++)
{
string strsub = str.Remove(i, 1);//删除第一个字符
ArrayStrs(strsub, arrstr + str.Substring(i, 1), strlen);//字符串递归排列组合
}
}立即成为编程经验丰富的程序员不是梦,详见http://www.psec.net.cn