数字排列问题.指定一个列数n,如n=4,每一列由1-5的数字组成.排列的结果如下:
1 1 1 1
1 1 1 2
1 1 1 3
1 1 1 4
1 1 1 5
1 1 2 1
1 1 2 2
1 1 2 3
1 1 2 4
1 1 2 5
1 1 3 1
1 1 3 2
1 1 3 3
1 1 3 4
1 1 3 5
1 1 4 1
1 1 4 2
1 1 4 3
1 1 4 4
1 1 4 5
1 1 5 1
1 1 5 2
1 1 5 3
1 1 5 4
1 1 5 5
1 2 1 1
1 2 1 2
1 2 1 3
1 2 1 4
1 2 1 5
......
求一算法...
1 1 1 1
1 1 1 2
1 1 1 3
1 1 1 4
1 1 1 5
1 1 2 1
1 1 2 2
1 1 2 3
1 1 2 4
1 1 2 5
1 1 3 1
1 1 3 2
1 1 3 3
1 1 3 4
1 1 3 5
1 1 4 1
1 1 4 2
1 1 4 3
1 1 4 4
1 1 4 5
1 1 5 1
1 1 5 2
1 1 5 3
1 1 5 4
1 1 5 5
1 2 1 1
1 2 1 2
1 2 1 3
1 2 1 4
1 2 1 5
......
求一算法...
int n = 4;
int row = (int)Math.Pow(5, n);
for (int i = 1; i <= row; i++)
{
for (int j = n; j >= 1; j--)
{
int k = i % 5;
if (j == 1)
{
Console.Write((k == 0 ? 5 : k) + " ");
}
else
{
int l = i / (int)Math.Pow(5, j - 1);
if (k != 0 || i % (int)Math.Pow(5, j - 1) != 0)
l += 1;
while (l > 5)
l = l / 5;
Console.Write(l + " ");
}
}
Console.WriteLine();
}
using System.Collections.Generic;
using System.Linq;
using System.Text;namespace ConsoleApplication1
{
class Program
{
static void Main(string[] args)
{
createPerArray(4);
} static void createPerArray(int selectCount)
{
string[] strArray = new string[selectCount * 5];
int k=0;
for (int i = 1; i <= 5; i++)
{
for (int j = 0; j < selectCount;j++)
{
strArray[k++] = i.ToString();
} }
int totalCount = strArray.Length;
int[] currentSelect = new int[selectCount];
int last = selectCount - 1; //付初始值
for (int i = 0; i < selectCount; i++)
currentSelect[i] = i; while (true)
{
//输出部分,生成的时候从0计数,所以输出的时候+1
for (int i = 0; i < selectCount; i++)
Console.Write(" {0} ",strArray[currentSelect[i]]); Console.WriteLine(); //如果不进位
if (currentSelect[last] < totalCount - 1)
currentSelect[last]++;
else
{
//进位部分
int position = last; while (position > 0 && currentSelect[position - 1] == currentSelect[position] - 1)
position--; if (position == 0)
return; currentSelect[position - 1]++; for (int i = position; i < selectCount; i++)
currentSelect[i] = currentSelect[i - 1] + 1;
}
}
}
}
}
程序参考http://topic.csdn.net/u/20090220/23/e2d130d9-d7d4-4520-bec7-e78ae6ca9aff.html
private void Form2_Load(object sender, EventArgs e)
{
var res= Enumerable.Range(0, 100).Select(p => string.Join("", c5(p, 5).Reverse().ToArray()).PadLeft(4, '1'));
} private IEnumerable<string> c5(int input,int basenum)
{
yield return (input % basenum+1).ToString();
if (input / basenum >= 1)
{
var list = c5(input / basenum, basenum);
foreach (var item in list)
{
yield return item;
}
}
}
{
var rows = Enumerable.Range(1, 5);
var query = rows.Select(s => s.ToString()).ToList();
for (var i = 0; i < col; i++)
{
query = (from r1 in query
from r2 in rows
let intC = Convert.ToInt32(r1.Split(' ').ElementAt(i))
where intC < r2 || intC == r2
select string.Format("{0} {1}", r1, r2)).ToList();
} return query;
} //调用
var result = Reset(4);
foreach (var item in result)
Console.WriteLine(item);
{
var rows = Enumerable.Range(1, 5);
var query = rows.Select(s => s.ToString()).ToList();
for (var i = 0; i < col-1; i++)
{
query = (from r1 in query
from r2 in rows
let intC = Convert.ToInt32(r1.Split(' ').ElementAt(i))
where intC < r2 || intC == r2
select string.Format("{0} {1}", r1, r2)).ToList();
} return query;
}
不过赞同3L的说法。
LZ这个就是5进制嘛,
只是你这个到6直接进到1,而不是0,
做个5进制,然后怎么排列数组自己说了算了就。
呵呵,说了下我的想法,见笑了。