有几个预先的假定:n个对象以一种字典顺序进行排列,这样我们就生成1-n之间的m个数字的排列。
下面是C#代码实现:
void main(){
int n = int.Parse(Console.ReadLine());
int m = int.Parse(Console.ReadLine());
int[] z = new int[m + 1];
for (int i = 0; i < m + 1; ++i)
z[i] = i;
int t = 0;
do {
for (int i = 1; i < m + 1; ++i)
Console.Write(z[i]);
Console.Write("/t");
int m = int.Parse(Console.ReadLine());
int[] z = new int[m + 1];
for (int i = 0; i < m + 1; ++i)
z[i] = i;
int t = 0;
do {
for (int i = 1; i < m + 1; ++i)
Console.Write(z[i]);
Console.Write("/t");
t = m;
while (z[t] == n - m + t) t--;
z[t]++;
while (z[t] == n - m + t) t--;
z[t]++;
for (int i = t + 1; i < m + 1; i++)
z[i] = z[t] + i - t;
} while (t != 0);
z[i] = z[t] + i - t;
} while (t != 0);
Console.WriteLine();
}