我正在尝试制作一个递归函数,该函数将打印出具有整数数组重复项的所有排列,但数字有一个范围,数组大小也有范围。假设我们有一个数组 num[2]
,它的范围是 0-1,例如,它会打印出类似
00
01
11
10
如果它是一个简单的排列,我可以使用这样一个简单的排列函数:
void permute(int *array,int i,int length) {
if (length == i){
printArray(array,length);
return;
}
int j = i;
for (j = i; j < length; j++) {
swap(array+i,array+j);
permute(array,i+1,length);
swap(array+i,array+j);
}
return;
}
void swap(char *x, char *y)
{
char temp;
temp = *x;
*x = *y;
*y = temp;
}
但是如何让它通过给定数组大小的 n 大小的数字范围?
我的问题与这里的另一个问题不同,因为我没有一个包含值的集合数组,示例代码就是这样做的,但我需要的是帮助打印 k 数组中范围 n 的所有排列点,所以说 n 是 3,k 是 3 那么它就是
000
001
002
003
010
011
etc...
最佳答案
根据您的要求,您希望为每个包含 n
元素的数组和包含 k
元素的结果数组打印所有 n^k 排列。所以在每个位置 i
我们必须放置数组的每个元素并为下一个继续这样做。像这样的代码:
void permute(int *array, int *result, int i, int n, int length) {
if (length == i){
printArray(result, length);
return;
}
for (int j = 0; j < n; j++) {
result[i] = array[j];
permute(array, result, i + 1, n, length);
}
}
int main()
{
int a[] = { 0, 1, 2 }, b[2];
permute(a, b, 0, 3, 2);
return 0;
}
关于c - 如何使用递归打印出 C 中一系列数字的所有排列?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32934625/