日期:2014-05-19  浏览次数:20725 次

求教高手!!
比如设计一个求1234的的排列组合,我清楚要用四重循环来做,但是不明白循环的执行过程,好像很复杂,不知哪位高手能给出清晰的思路

------解决方案--------------------
for (int i = 1; i < 5; i++)
for (int j = 1; j < 5; j++)
for (int k = 1; k < 5; k++)
for(int l = 1;l < 5;l++)
{
string temp = i.ToString() + j.ToString() + k.ToString() + l.ToString();
Console.WriteLine(temp);
}

刚有人问相同的问题,难道是作业!?

------解决方案--------------------
但是不明白循环的执行过程
-----------------------------------------
debug调式 在第一层for设置断点 F11单步走

马上很清楚 到底怎么循环的
------解决方案--------------------
嵌套循环用于多维数组的访问等
------解决方案--------------------
你每一数字都需要用一个变量来存放,当然需要嵌套循环。
给个1,2,3,4全排列的列子,只用到三重循环:


string[] s = new string[] { "1 ", "2 ", "3 ", "4 "};
int i, j, m;
for(i=0;i <=3;i++)
for (j = 0; j <= 3; j++)
{
if (j == i)
continue;
else
for (m = 0; m <= 3; m++)
{
if (m == j||m==i)
continue;
else
Console.WriteLine(s[i].ToString() + s[j].ToString() + s[m].ToString() + s[6 - i - j - m].ToString() + "\r\n ");
}
}
------解决方案--------------------
请说明一下,如何知道这个问题要用欠套循环来解决,小弟对欠套循环有些不理解,不知什么时候要用到他
========
1。
有什么好说的, 该出手就出手

2。
递归全排列

int[] testData = new int[] { 1, 2, 3, 4, 5, 6 };
Perm(testData, 0, testData.Length - 1);


void Perm(int[] array, int startIndex, int endIndex)
{
if (startIndex == endIndex) {
for (int i = 0; i <= endIndex; i++) {

Console.Write(array[i].ToString() + ", ");
}
Console.WriteLine();

}
else {
for (int i = startIndex; i < endIndex; i++) {
int t = array[startIndex];
array[startIndex] = array[i];
array[i] = t;
Perm(array, startIndex + 1, endIndex);
t = array[startIndex];
array[startIndex] = array[i];
array[i] = t;
}
}
}
------解决方案--------------------
for (int i = startIndex; i <= endIndex; i++)
这样就没问题了