当前位置: 代码迷 >> C# >> 有个嵌套循环构造数组不知道如何写,多谢
  详细解决方案

有个嵌套循环构造数组不知道如何写,多谢

热度:52   发布时间:2016-05-05 03:02:07.0
有个嵌套循环构造数组不知道怎么写,求助,谢谢。
如果数组有5列,有3行,其中的数据主要是3,1,0构成。如下:
f1 f2 f3 f4 f5
3 3 0 3 3
1 3 1 3 0
3 0 0 1 0
要求产生另一个数组,但是只能每行有1个数与原来的数组不同:
f1 f2 f3 f4 f5
1 3 0 3 3(只有一个不同,与第一行第一列不同,原值为3,新值为1)
0 3 0 3 3(只有一个不同,与第一行第一列不同,原值为3,新值为0)
3 1 0 3 3(只有一个不同,与第一行第二列不同,原值为3,新值为1)
3 0 0 3 3
3 3 3 3 3
3 3 1 3 3
3 3 0 1 3
3 3 0 0 3
3 3 0 3 1
3 3 0 3 0(只有一个不同,与第一行第5列不同,原值为3,新值为0)
第一行构造结束,共有2*5=10种结果,加上2,3行共2*5*3=30行。
构造与原数组2,3行不同的的值.....
问1、这个数组怎么构造?
2、如果列有14列,行有1000行怎么实现?
3、如果新数组每一行有2、3、4个值与原数组不同,算法怎么写?
------解决思路----------------------
方法:

public static List<int[]> Structure(List<int[]> list)
{
int[] arr = list.SelectMany(p => p).Distinct().ToArray();
List<int[]> newList = new List<int[]>();
foreach(int[] iarr in list)
{
for (int i = 0; i < iarr.Length; i++)
{
foreach (int a in arr.Where(p => p != iarr[i]))
{
int[] narr = (int[])iarr.Clone();
narr[i] = a;
newList.Add(narr);
}
}
}
return newList;
}


调用:

List<int[]> aList = new List<int[]>();
aList.Add(new int[] { 3, 3, 0, 3, 3 });
aList.Add(new int[] { 1, 3, 1, 3, 0 });
aList.Add(new int[] { 3, 0, 0, 1, 0 });

List<int[]> nList = Structure(aList);
for(int i = 0;i<nList.Count;i++)
{
Console.WriteLine(string.Join(",", nList[i]));
}
Console.WriteLine("合计总数{0}", nList.Count);


结果:
  相关解决方案