帮忙求助,用C#怎么实现呢?急!!! 用1、2、2、3、4、5这六个数字,用C#写一个main函数(控制台程序),打印出所有不同的排列,如:512234、412345等,要求:"4"不能在第三位,"3"与"5"不能相连。输出格式如下:999999999999 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 贴代码,输出了249种排列: int i,j; int i1, i2, i3, i4, i5; int j1, j2, j3, j4, j5; int k1, k2, k3, k4, k5; int[] a1 ={ 1, 2, 2, 3, 4, 5 }; int[] a2 ={ 0, 0, 0, 0, 0 }; int[] a3 ={ 0, 0, 0, 0 }; int[] a4 ={ 0, 0, 0 }; int[] a5 ={ 0, 0 }; int[] b ={ 0, 0, 0, 0, 0, 0 }; string s; j1 = 0; for (k1 = 0; k1 <= 5; k1++) if (a1[k1] == 2) { j1 = j1 + 1; if (j1 == 2) break; } for (i1 = 0; i1 <= 5; i1++) { if (j1==2 && k1==i1) //排除22重复 continue; b[0]=a1[i1]; j = 0; for (i = 0; i <= 5; i++) if (i != i1) { a2[j] = a1[i]; j = j + 1; } j2 = 0; for (k2 = 0; k2 <= 4; k2++) if (a2[k2] == 2) { j2 = j2 + 1; if (j2 == 2) break; } for (i2 = 0; i2 <= 4; i2++) { if (j2 == 2 && k2 == i2) //排除22重复 continue; b[1] = a2[i2]; j = 0; for (i = 0; i <= 4; i++) if (i != i2) { a3[j] = a2[i]; j = j + 1; } j3 = 0; for (k3 = 0; k3 <= 3; k3++) if (a3[k3] == 2) { j3 = j3 + 1; if (j3 == 2) break; } for (i3 = 0; i3 <= 3; i3++) { if (j3 == 2 && k3 == i3) //排除22重复 continue; b[2] = a3[i3]; j = 0; for (i = 0; i <= 3; i++) if (i != i3) { a4[j] = a3[i]; j = j + 1; } j4 = 0; for (k4 = 0; k4 <= 2; k4++) if (a4[k4] == 2) { j4 = j4 + 1; if (j4 == 2) break; } for (i4 = 0; i4 <= 2; i4++) { if (j4 == 2 && k4 == i4) //排除22重复 continue; b[3] = a4[i4]; j = 0; for (i = 0; i <= 2; i++) if (i != i4) { a5[j] = a4[i]; j = j + 1; } j5 = 0; for (k5 = 0; k5 <= 1; k5++) if (a5[k5] == 2) { j5 = j5 + 1; if (j5 == 2) break; } for (i5 = 0; i5 <= 1; i5++) { if (j5 == 2 && k5 == i5) //排除22重复 continue; b[4]=a5[i5]; if (i5 == 0) { b[5] = a5[1]; } else { b[5] = a5[0]; } if (b[2] == 4) //排除4在第3位 { } else { s = b[0].ToString() + b[1].ToString() + b[2].ToString() + b[3].ToString() + b[4].ToString() + b[5].ToString(); if (s.IndexOf("35") > -1) //排除35在一起 { } else { Console.Write(s + "\r\n"); } } } } } } } 谢谢大家。其实这道题我做出了一半,但是现在有一个地方实现不了。class Program { public static ArrayList list= new ArrayList(); static void Main(string[] args) { string str = "122345"; Sort("",str); foreach (int m in str) Console.WriteLine("{0}", m); } private static void Sort(string p, string str) { if (p.Length != str.Length) { String rest = getRest(p, str); for (int i = 0; i < rest.Length; i++) { String temp = str + rest.Substring(i, i + 1); if (temp.IndexOf("4") != 2 && temp.IndexOf("35") == -1 && temp.IndexOf("53") == -1) {// 过滤显示条件,如果去掉此处的判断,就是列出所有字符集的排列组合 Console.WriteLine(temp); if (!list.Contains(temp)) { list.Add(temp); } Sort(temp, str); } } } } private static string getRest(string p,string str){ String rest = ""; if (str.Length > p.Length) { rest = str; for (int i = 1; i < str.Length; i++) { //rest = rest.Replaceirst(str.Substring(i, i + 1), ""); //rest = rest.Replace(rest.IndexOf(p), str.Substring(i, i + 1)); //rest=(rest.Remove(rest.IndexOf('1'),1)).Insert(rest.IndexOf('1'),""); rest = (rest.Remove(str.IndexOf('i'), i + 1)).Insert(rest.IndexOf('i'), ""); } } return rest; 就是红色的那个地方出现异常。说StartIndex 不能小于 0。参数名: startIndex不知道改如何处理这道题。谢谢大家帮忙。拜托 我上面的代码如果你要加排除53相连,去掉53的输出还有198种排列。把这句: if (s.IndexOf("35") > -1) //排除35在一起改为: if (s.IndexOf("35") > -1 || s.IndexOf("53")>-1) //排除35 53在一起 看了下你的算法问题不少,加个判断去掉那个错误,结果也是不正确的(算法逻辑有点问题)。你可以把你的思路,每个子函数的功能备注出来,这样才能帮你处理。还有不用判断22的重复吗? 6个数字生成的排列,其中2个2(数字相同)会导致部分输出是重复的。 group by 分组 DataGridView中DataGridViewComboBoxColumn如何绑定枚举类型的数据 关于顶层窗口的问题 我有源代码,开发环境是中文的,要是我改成英文版的有什么困难啊? 請教GDI+問題 如何用编程方式给DataGrid加入Template类型的列? 怎样设置 Grid表格在编辑时TextBox的宽度 关于异步网络连接和GC机制的问题(高手请进) 问一个有关参数写法的问题?急盼回答!谢谢 cad二次开发提取所有和x轴平行的线 VS2005中ComboBox控件 求助LDAP问题(C#)
int i,j;
int i1, i2, i3, i4, i5;
int j1, j2, j3, j4, j5;
int k1, k2, k3, k4, k5;
int[] a1 ={ 1, 2, 2, 3, 4, 5 };
int[] a2 ={ 0, 0, 0, 0, 0 };
int[] a3 ={ 0, 0, 0, 0 };
int[] a4 ={ 0, 0, 0 };
int[] a5 ={ 0, 0 };
int[] b ={ 0, 0, 0, 0, 0, 0 };
string s;
j1 = 0;
for (k1 = 0; k1 <= 5; k1++)
if (a1[k1] == 2)
{
j1 = j1 + 1;
if (j1 == 2)
break;
}
for (i1 = 0; i1 <= 5; i1++)
{
if (j1==2 && k1==i1) //排除22重复
continue;
b[0]=a1[i1];
j = 0;
for (i = 0; i <= 5; i++)
if (i != i1)
{
a2[j] = a1[i];
j = j + 1;
}
j2 = 0;
for (k2 = 0; k2 <= 4; k2++)
if (a2[k2] == 2)
{
j2 = j2 + 1;
if (j2 == 2)
break;
}
for (i2 = 0; i2 <= 4; i2++)
{
if (j2 == 2 && k2 == i2) //排除22重复
continue;
b[1] = a2[i2];
j = 0;
for (i = 0; i <= 4; i++)
if (i != i2)
{
a3[j] = a2[i];
j = j + 1;
}
j3 = 0;
for (k3 = 0; k3 <= 3; k3++)
if (a3[k3] == 2)
{
j3 = j3 + 1;
if (j3 == 2)
break;
}
for (i3 = 0; i3 <= 3; i3++)
{
if (j3 == 2 && k3 == i3) //排除22重复
continue;
b[2] = a3[i3];
j = 0;
for (i = 0; i <= 3; i++)
if (i != i3)
{
a4[j] = a3[i];
j = j + 1;
}
j4 = 0;
for (k4 = 0; k4 <= 2; k4++)
if (a4[k4] == 2)
{
j4 = j4 + 1;
if (j4 == 2)
break;
}
for (i4 = 0; i4 <= 2; i4++)
{
if (j4 == 2 && k4 == i4) //排除22重复
continue;
b[3] = a4[i4];
j = 0;
for (i = 0; i <= 2; i++)
if (i != i4)
{
a5[j] = a4[i];
j = j + 1;
}
j5 = 0;
for (k5 = 0; k5 <= 1; k5++)
if (a5[k5] == 2)
{
j5 = j5 + 1;
if (j5 == 2)
break;
}
for (i5 = 0; i5 <= 1; i5++)
{
if (j5 == 2 && k5 == i5) //排除22重复
continue;
b[4]=a5[i5];
if (i5 == 0)
{
b[5] = a5[1];
}
else
{
b[5] = a5[0];
}
if (b[2] == 4) //排除4在第3位
{
}
else
{
s = b[0].ToString() + b[1].ToString() + b[2].ToString() + b[3].ToString() + b[4].ToString() + b[5].ToString();
if (s.IndexOf("35") > -1) //排除35在一起
{
}
else
{
Console.Write(s + "\r\n");
}
}
}
}
}
}
}
class Program
{
public static ArrayList list= new ArrayList();
static void Main(string[] args)
{
string str = "122345";
Sort("",str);
foreach (int m in str)
Console.WriteLine("{0}", m);
} private static void Sort(string p, string str)
{
if (p.Length != str.Length)
{
String rest = getRest(p, str);
for (int i = 0; i < rest.Length; i++)
{
String temp = str + rest.Substring(i, i + 1);
if (temp.IndexOf("4") != 2 && temp.IndexOf("35") == -1 && temp.IndexOf("53") == -1) {// 过滤显示条件,如果去掉此处的判断,就是列出所有字符集的排列组合
Console.WriteLine(temp);
if (!list.Contains(temp))
{
list.Add(temp);
}
Sort(temp, str);
}
}
}
}
private static string getRest(string p,string str)
{
String rest = "";
if (str.Length > p.Length)
{
rest = str;
for (int i = 1; i < str.Length; i++)
{
//rest = rest.Replaceirst(str.Substring(i, i + 1), "");
//rest = rest.Replace(rest.IndexOf(p), str.Substring(i, i + 1));
//rest=(rest.Remove(rest.IndexOf('1'),1)).Insert(rest.IndexOf('1'),""); rest = (rest.Remove(str.IndexOf('i'), i + 1)).Insert(rest.IndexOf('i'), ""); }
}
return rest;
参数名: startIndex不知道改如何处理这道题。谢谢大家帮忙。
拜托
把这句:
if (s.IndexOf("35") > -1) //排除35在一起
改为:
if (s.IndexOf("35") > -1 || s.IndexOf("53")>-1) //排除35 53在一起
看了下你的算法问题不少,加个判断去掉那个错误,结果也是不正确的(算法逻辑有点问题)。你可以把你的思路,每个子函数的功能备注出来,这样才能帮你处理。还有不用判断22的重复吗? 6个数字生成的排列,其中2个2(数字相同)会导致部分输出是重复的。