解题思路:全排列后做比较

注意事项:n超过11长度不够 不能用整型变量储存

代码比较复杂 没想到别的

参考代码:

#include <stdio.h>

void printpermutation(int a[], int b[], int n, int *count)

{

int i;

// 计数器 用来记录几个元素与原数组不同 

int index = 0;

for(i = 0; i < n; i++)

{

if(a[i] != b[i])

index++;

}

if(index == n)

(*count)++;

}

void permutation(int a[], int b[], int start, int end, int *count)

{

int i;

if(start == end)

{

printpermutation(a, b, end + 1, count);

return;

}

else

{

int temp;

for(i = start; i <= end; i++)

{

temp = a[start];

a[start] = a[i];

a[i] = temp;


permutation(a, b, start + 1, end, count);


temp = a[start];

a[start] = a[i];

a[i] = temp;

}

}


}

int main() 

{

int n;

while(scanf("%d", &n) != EOF)

{

int i;

int a[20];

for(i = 0; i < n; i++)

{

a[i] = i + 1;

}


// 复制原数组 

int b[20];

for(i = 0; i < n; i++)

b[i] = a[i];


// 计数器 用来记录排列不同的次数 

int count = 0;


// 进行全排列 

permutation(a, b, 0, n - 1, &count);

printf("%d\n", count);

}


    return 0;

}


点赞(0)
 

0.0分

0 人评分

C语言网提供由在职研发工程师或ACM蓝桥杯竞赛优秀选手录制的视频教程,并配有习题和答疑,点击了解:

一点编程也不会写的:零基础C语言学练课程

解决困扰你多年的C语言疑难杂症特性的C语言进阶课程

从零到写出一个爬虫的Python编程课程

只会语法写不出代码?手把手带你写100个编程真题的编程百练课程

信息学奥赛或C++选手的 必学C++课程

蓝桥杯ACM、信息学奥赛的必学课程:算法竞赛课入门课程

手把手讲解近五年真题的蓝桥杯辅导课程

评论列表 共有 0 条评论

暂无评论