static void Main(string[] args) { int i1,i2,i3,i4,i5,i6; int i = 0; for (int a = 1; a < 34 - 5; a++) { i1 = a; for (int b = a + 1; b < 34 - 4; b++) { i2 = b; for (int c = b + 1; c < 34 - 3; c++) { i3 = c; for (int d = c + 1; d < 34 - 2;d++ ) { i4 = d; for (int e = d + 1; e < 34 - 1; e++) { i5 = e; for (int f = e + 1; f < 34; f++) { i6 = f; //Console.WriteLine(......); i++; } } } } } } Console.WriteLine(i.ToString()); } 最后结果是 1107568 我的机器运算用了不到半秒。
using System; using System.Collections.Generic;namespace ConsoleApplication2 { class Program { static void Main(string[] args) { int i, j, k, l, m, n; List<int> list = new List<int>(); for (i = 1; i < 34; i++) { for (j = 1; j < 34; j++) { for (k = 1; k < 34; k++) { for (l = 1; l < 34; l++) { for (m = 1; m < 34; m++) { for (n = 1; n < 34; n++) { if (i != j && i != k && i != l && i != m && i != n && j != k && j != l && j != m && j != n && l != m && l != n && m != n) { Console.WriteLine(i.ToString() + j.ToString() + k.ToString() + l.ToString() + m.ToString() + n.ToString()); } } } } } } } Console.ReadLine(); } } }
using System; using System.Collections.Generic;namespace ConsoleApplication2 { class Program { static void Main(string[] args) { int i, j, k, l, m, n; int s = 0; DateTime dt1 = DateTime.Now; List<int> list = new List<int>(); for (i = 1; i < 34; i++) { for (j = 1; j < 34; j++) { for (k = 1; k < 34; k++) { for (l = 1; l < 34; l++) { for (m = 1; m < 34; m++) { for (n = 1; n < 34; n++) { if (i != j && i != k && i != l && i != m && i != n && j != k && j != l && j != m && j != n && l != m && l != n && m != n) { //Console.WriteLine(i.ToString() + j.ToString() + k.ToString() + l.ToString() + m.ToString() + n.ToString()); s++;
不要打击我或许你就是那个幸运儿也说不定,中头奖了别忘了我哈,不给我Money给我送分也行。哈哈
int i1,i2,i3,i4,i5,i6;
for(a=1,a<34-5;a++)
{
i1=a;
for(int b=a+1;b<34-4;b++)
{
i2=b;
for(int c=b+1;c<34-3;c++)
{
i3=c;
for(...)
{
......
//最后一个(第六个)for循环中输出i1-i6的值并换行即可。
}
}
}
}
{
int i1,i2,i3,i4,i5,i6;
int i = 0;
for (int a = 1; a < 34 - 5; a++)
{
i1 = a;
for (int b = a + 1; b < 34 - 4; b++)
{
i2 = b;
for (int c = b + 1; c < 34 - 3; c++)
{
i3 = c;
for (int d = c + 1; d < 34 - 2;d++ )
{
i4 = d;
for (int e = d + 1; e < 34 - 1; e++)
{
i5 = e;
for (int f = e + 1; f < 34; f++)
{
i6 = f;
//Console.WriteLine(......);
i++;
}
}
}
}
}
}
Console.WriteLine(i.ToString());
}
最后结果是 1107568
我的机器运算用了不到半秒。
你都嵌套了6个循环一般建议超过不3个的
确实,如果超过三个,运算量大,而且代码结构易乱。
但是也得具体问题具体看嘛,这就是个小算法而已,又不是项目工程代码,何必死板硬套!
这里循环虽然是6个,但是方法很清晰,代码结构并不乱,运算效率也不低吧。
况且楼主要求是要输出所有组合的吧,你能避免循环?
要是直接排列组合问有多少种,那直接(33X32X31X30X29X28)/(6X5X4X3X2X1)=1107586了。
这东西你还想办法写成递归么?你还去考虑退出条件?去考虑剪枝?
或许你有更高效率的方法?贴上来看看?
using System;
using System.Collections.Generic;namespace ConsoleApplication2
{
class Program
{
static void Main(string[] args)
{
int i, j, k, l, m, n;
List<int> list = new List<int>();
for (i = 1; i < 34; i++)
{
for (j = 1; j < 34; j++)
{
for (k = 1; k < 34; k++)
{
for (l = 1; l < 34; l++)
{
for (m = 1; m < 34; m++)
{
for (n = 1; n < 34; n++)
{
if (i != j && i != k && i != l && i != m && i != n && j != k && j != l && j != m && j != n && l != m && l != n && m != n)
{
Console.WriteLine(i.ToString() + j.ToString() + k.ToString() + l.ToString() + m.ToString() + n.ToString());
}
}
}
}
}
}
}
Console.ReadLine();
}
}
}
using System;
using System.Collections.Generic;namespace ConsoleApplication2
{
class Program
{
static void Main(string[] args)
{
int i, j, k, l, m, n;
int s = 0;
DateTime dt1 = DateTime.Now;
List<int> list = new List<int>();
for (i = 1; i < 34; i++)
{
for (j = 1; j < 34; j++)
{
for (k = 1; k < 34; k++)
{
for (l = 1; l < 34; l++)
{
for (m = 1; m < 34; m++)
{
for (n = 1; n < 34; n++)
{
if (i != j && i != k && i != l && i != m && i != n && j != k && j != l && j != m && j != n && l != m && l != n && m != n)
{
//Console.WriteLine(i.ToString() + j.ToString() + k.ToString() + l.ToString() + m.ToString() + n.ToString());
s++;
}
}
}
}
}
}
}
Console.WriteLine("共有:"+s.ToString()+"组数;");
DateTime dt2 = DateTime.Now;
int dt = (dt2 - dt1).Seconds;
Console.WriteLine("用时:"+dt.ToString()+"秒;");
Console.ReadLine();
}
}
}共有:882889920组数;
用时16秒;