一个string数组,里头的数据两两组合的算法

一个string数组,里面的数据两两组合的算法
一个string数组,里面的数据两两组合,可以得到多少种不同的结果,求算法;
比如string[] strArray={"关键词1","关键词2","关键词3","关键词4","关键词5","关键词6"}

组合的大概结果为:
1,关键词1关键词2
2,关键词1关键词3
3,关键词1关键词4
......这里只是举个例子,算法是怎么样的?
数组元素两两组合的算法

------解决方案--------------------
	string[] strArray={"关键词1","关键词2","关键词3","关键词4","关键词5","关键词6"};
var query=from s in strArray
          from t in strArray
  select s+t;

------解决方案--------------------
	var query=from s in strArray
          from t in strArray.Except(new string[]{s})
  select s+t;

------解决方案--------------------
这个中学数学教材上古典概型一章都有
数组有N个元素
那么第一次取有N个取法
第二次取,不能取这个元素了,那么就是剩下的N-1个。
所以一共是N*(N-1)种取法。
如果不考虑顺序,因为取2个元素,所以只有2个顺序,那么就是再除以2。
也就是N*(N-1)/2。

要知道为什么!