我有一个16个元素的序列:1,2,3,...,16(或2 * n个元素)。序列元素总是从1到长度(序列),即4个元素的序列是1,2,3,4。
编辑:第一个序列元素总是= 1,第二个序列元素= 2,第三个序列元素= 3,依此类推。 这是一款游戏“找一对图片”。
我想写一个将元素分成对的算法。例如, 1-15 2-16 3-13 4-9 5-14 6-10 7-11 8-12
PS:没有linq请:) vs2005
编辑:正如我所看到的,我的问题很简单,所以没有人可以回答:)或者每个人都害怕什么?
答案 0 :(得分:0)
这个怎么样?
class Program
{
static void Main(string[] args)
{
int size = 8;
List<int> tmpList = new List<int>();
for (int i = size; i <= size * 2; i++)
{
tmpList.Add(i);
}
List<Pair> result = new List<Pair>();
Random r = new Random();
for (int i = 1; i <= size; i++)
{
Pair pair = new Pair() { a = i, b = PopRandom(r, tmpList) };
result.Add(pair);
}
foreach (Pair p in result)
{
Console.WriteLine("{0} - {1}", p.a, p.b);
}
}
static private int PopRandom(Random r, List<int> list)
{
int i = r.Next(0, list.Count);
int result = list[i];
list.RemoveAt(i);
return result;
}
struct Pair
{
public int a;
public int b;
}
}
UPD :这是为.net 2.0目标平台成功编译的 UPD 2 :随机实例从PopRandom()
移出答案 1 :(得分:0)
没有选择标准,只需要另外一个......
var result = new List<Tuple<int,int>>();
for (int i = 1; i < size; i+=2 )
{
var pair = new Tuple.Create(i,i+1);
result.Add(pair);
}