组合问题 如: A0-A9 B0-B9 C0-C9 后面数字为下标共有30个数 要求,就是在这30个数中,任意选取5个数为一组显示出来,并输出组合的个数 例: A0 A1 A2 A3 A4 A0 B0 C0 C1 C2 等等 . 最好有示例代码 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 ArrayList arr= new ArrayList();arr.Add(new string[10]);arr.Add(new string[10]);arr.Add(new string[10]);Random rand = new Random(Guid.NewGuid().GetHashCode());for (int i = 0; i < arr.Count; i++){ Array arr2= arr[i] as Array; for (int j = 0; j < 5; j++) { Console.WriteLine(arr2.GetValue(rand.Next(0,9)).ToString()); }} static void Main(string[] args) { char[] charArray1 = "ABC".ToCharArray(); char[] charArray2 = "0123456789".ToCharArray(); Random rdm = new Random(); for (int i = 0; i < 10; i++) { for (int j = 0; j < 5; j++) { int index = rdm.Next(0, 30); int t1 = (int)index / 10; int t2 = index - t1 * 10; string code = charArray1[t1].ToString() + charArray2[t2].ToString(); Console.Write(code + " "); } Console.WriteLine(); } Console.ReadLine(); } 纯引用1楼的代码:ArrayList arr= new ArrayList();arr.Add(new string[10]);arr.Add(new string[10]);arr.Add(new string[10]);Random rand = new Random(Guid.NewGuid().GetHashCode());for (int i = 0; i < arr.Count; i++){ Array arr2= arr[i] as Array; for (int j = 0; j < 5; j++) { Console.WriteLine(arr2.GetValue(rand.Next(0,9)).ToString()); }} C(5,30)=30!/25!/5!=142506class Program{ static void Main(string[] args) { // 生成测试数据 A0-A9, B0-B9, C0-C9 string[] testData = "ABC".SelectMany(a => "0123456789".Select(b => "" + a + b)).ToArray(); var combinations = Comb(testData, 5); foreach (var c in combinations) { // c 就是组合数列,可以对其进行处理 Console.WriteLine(string.Join(",", c)); } Console.WriteLine("共{0}种组合", combinations.Count()); File.WriteAllLines(@"d:\test.txt", combinations.Select(c=>string.Join(",", c))); } // 组合枚举方法, 返回数列的全部组合,data=数列,n=每组长度 static public IEnumerable<T[]> Comb<T>(T[] data, int n) { int m = data.Length; int[] c = Enumerable.Repeat(int.MaxValue, n).ToArray(); for (c[n - 1] = 0; ; c[0]++) { if (c[0] > m) { int p; for (p = 1; p < n; p++) if (c[p] < m - p) break; if (p >= n) yield break; c[p]++; for (int i = p - 1; i >= 0; i--) c[i] = c[i + 1] + 1; } yield return c.Select(i => data[i - 1]).ToArray(); } }} Sqlserver,select top 100 然后将这100条的Status标记为1,证明已读 初学窗体程序 对很多属性不知道 C# 禁用事件的问题 datagirdviewcomboboxcolumn问题 如何实现数据库多对多的循环录入 绘图问题,树托拽,画上去的图片为什么显示出来的是一团黑。。。 如何保存剪贴板中的数据(任意格式)并读取出来? 请教各位大侠,几个有关.DLL的问题 C# 反射方式调用COm对象 出现的一点小疑问 如何把sql server表中数据导出sql脚本 Datagridview的动态录入到数据库 asp.net双击listbox列表项后,弹出打开与保存为对话框
arr.Add(new string[10]);
arr.Add(new string[10]);
arr.Add(new string[10]);
Random rand = new Random(Guid.NewGuid().GetHashCode());
for (int i = 0; i < arr.Count; i++)
{
Array arr2= arr[i] as Array;
for (int j = 0; j < 5; j++)
{
Console.WriteLine(arr2.GetValue(rand.Next(0,9)).ToString());
}
}
static void Main(string[] args)
{
char[] charArray1 = "ABC".ToCharArray();
char[] charArray2 = "0123456789".ToCharArray(); Random rdm = new Random(); for (int i = 0; i < 10; i++)
{
for (int j = 0; j < 5; j++)
{ int index = rdm.Next(0, 30);
int t1 = (int)index / 10;
int t2 = index - t1 * 10;
string code = charArray1[t1].ToString() + charArray2[t2].ToString();
Console.Write(code + " ");
}
Console.WriteLine();
} Console.ReadLine();
}
arr.Add(new string[10]);
arr.Add(new string[10]);
arr.Add(new string[10]);
Random rand = new Random(Guid.NewGuid().GetHashCode());
for (int i = 0; i < arr.Count; i++)
{
Array arr2= arr[i] as Array;
for (int j = 0; j < 5; j++)
{
Console.WriteLine(arr2.GetValue(rand.Next(0,9)).ToString());
}
}
{
static void Main(string[] args)
{
// 生成测试数据 A0-A9, B0-B9, C0-C9
string[] testData = "ABC".SelectMany(a => "0123456789".Select(b => "" + a + b)).ToArray(); var combinations = Comb(testData, 5);
foreach (var c in combinations)
{
// c 就是组合数列,可以对其进行处理
Console.WriteLine(string.Join(",", c));
}
Console.WriteLine("共{0}种组合", combinations.Count()); File.WriteAllLines(@"d:\test.txt", combinations.Select(c=>string.Join(",", c)));
} // 组合枚举方法, 返回数列的全部组合,data=数列,n=每组长度
static public IEnumerable<T[]> Comb<T>(T[] data, int n)
{
int m = data.Length;
int[] c = Enumerable.Repeat(int.MaxValue, n).ToArray(); for (c[n - 1] = 0; ; c[0]++)
{
if (c[0] > m)
{
int p;
for (p = 1; p < n; p++)
if (c[p] < m - p) break;
if (p >= n) yield break; c[p]++;
for (int i = p - 1; i >= 0; i--)
c[i] = c[i + 1] + 1;
}
yield return c.Select(i => data[i - 1]).ToArray();
}
}
}