我一直试图弄清楚我的任务的这一部分在过去的一天无济于事,并需要一些帮助或指导来帮助理解这个问题。
到目前为止,我有这个: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,...,a是任意排列(其中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'underPermutation(int array [],int arraySize){'需要保持不变。
任何帮助或提示都会非常好!
答案 0 :(得分:1)
您的计划中存在一些错误,
swap() function will not affect the program as it doesn't use pass by reference.
max_array() should find the index of the maximum value, not the maximum value itself.
There is no recursion in your program as far as I can see.
main() should return int.
下面给出的程序片段可能会给你一个想法,
int ct=-1,n=10,temp[10]={0,0,0,0,0,0,0,0,0,0};
int intArray[10]={1,2,3,4,5,6,7,8,9,10};
permute(int k)
{
int i;
temp[k]=++ct;
if(ct==n-1)
{
for(i=0;i<n;i++)
{
printf("%d",intArray[temp[i]]);
}
printf("\n");
}
for(i=0;i<n;i++)
{
if(temp[i]==0)
{
permute(i);
}
}
ct--;
temp[k]=0;
}
int main()
{
permute(0);
}
答案 1 :(得分:0)
用于交换样本
#include <stdio.h>
void swap(int* A, int* B){
int wk;
wk = *A;
*A = *B;
*B = wk;
}
int main(void){
int array[] = { 1,2,3 };
swap(&array[0], &array[2]);
printf("array[0]=%d, array[2]=%d\n", array[0], array[2]);
return 0;
}