【发布时间】:2013-04-07 04:28:24
【问题描述】:
过去一天我一直在尝试完成这部分作业,但无济于事,需要一些帮助或指导来帮助理解问题。
到目前为止我有这个:
swap(int A, int B){
int temp;
temp = A;
A = B;
B = temp;
}
int max_array(int array[], int arraySize)
{
int i, max=-32000;
for (i=0; i<arraySize; i++)
{
if (array[i]>max)
{
max=array[i];
}
}
printf("%d \n Max array: ", max)
return(max);
}
int nextPermutation(int array[], int arraySize){
int i;
n = max_array(array, arraySize);
if (int i; n == array[i] && i > 1; i++){
swap(array[i], array[i-1]);
}
else if(int i; n == array[i]; i++){
}
}
void main(){
int intArray[10] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10};
//int intArray[10] = {1, 10, 3, 9, 8, 6, 7, 2, 4, 5};
nextPermutation(intArray, 10);
int i = 0;
for(i = 0; i < 10; i++){
printf("%d ",intArray[i]);
}
}
但我很难理解的问题是 “如果 a1,...,an 是任意排列(其中 a1,...,an 是数字 1、2、...、n 的顺序可能不同),那么“下一个”排列由 以下程序: (i) 如果数组的最大元素(即 n)不是数组的第一个元素 数组,比如 n=ai ,其中 i>1 ,然后生成“下一个”排列 需要交换 ai 和 ai−1 。 (ii) 如果数组的最大元素在第一个位置,即 n=a1 ,那么 产生排列 (a1,...,an) 的“下一个”排列 , 首先找到 (n-1)-元素排列 (a2,...,an) 的“下一个”排列 ),然后将 a1 附加到由此获得的 (n-1) 个元素数组的末尾。"
所以它需要用 1,2,3,4,5,6,7,8,9,10 的数组排列每一个可能的组合,然后在到达这一点时完成 "(n, ..., 2 , 1). 这是 唯一没有“下一个”排列的排列。”
并且函数 int 'nextPermutation(int array[], int arraySize){' 需要保持不变。
任何帮助或提示都会很棒!
【问题讨论】:
-
那个交换函数不会做任何事情。
-
swap 既不返回值,也不通过引用传递参数。先解决这个问题
-
main也应该返回int。 -
只为交换功能添加 Void 是否仍然有效?我发现的所有使用 swap 函数的例子都没有返回值,比如 void swap(int A, int B)。
标签: c recursion permutation