n个数的全排列
来源:互联网 发布:网络协议本质论 pdf 编辑:程序博客网 时间:2024/06/09 23:03
基本实现
- 递归实现
#include <stdio.h>void Swap(char *a, char *b){// 交换a和b char temp = *a; *a = *b; *b = temp;}void Perm(char list[], int k, int m){ //生成list [k:m ]的所有排列方式 int i; if (k == m) {//输出一个排列方式 for (i = 0; i <= m; i++) putchar(list[i]); putchar('\n'); } else // list[k:m ]有多个排列方式 // 递归地产生这些排列方式 for (i=k; i <= m; i++) { Swap (&list[k], &list[i]); Perm (list, k+1, m); Swap (&list [k], &list [i]); }}int main(){ char s[]="123456789"; Perm(s, 0, 2); return 0;}
应用
- 求解 将1-9填入口口口+口口口=口口口,使得成立
#include <stdio.h>typedef int Element;int count;void Swap(Element *a, Element *b){// 交换a和b Element temp = *a; *a = *b; *b = temp;}void Perm(Element list[], int k, int m){ //生成list [k:m ]的所有排列方式 int i; if (k == m) {//判断一个排列方式 if(100*list[0]+10*list[1]+list[2]+100*list[3]+10*list[4]+list[5]==100*list[6]+10*list[7]+list[8]){ printf("%d%d%d+%d%d%d=%d%d%d\n",list[0],list[1],list[2],list[3],list[4],list[5],list[6],list[7],list[8]); count++; } } else // list[k:m ]有多个排列方式 // 递归地产生这些排列方式 for (i=k; i <= m; i++) { Swap (&list[k], &list[i]); Perm (list, k+1, m); Swap (&list [k], &list [i]); }}int main(){ Element number[]={1,2,3,4,5,6,7,8,9}; Perm(number, 0, 8); printf("共有%d个",count/2); return 0;}
0 0
- n个数的全排列
- N个数的全排列
- n个数的全排列
- N个数的全排列
- n个数的全排列
- N个数的全排列
- n个数全排列
- 求n个数的全排列
- 打印N个数的全排列
- N个数取m个数的全排列非递归
- N个数全排列问题
- 1- n , n个数的全排列(dfs)
- 全排列的个数
- n个数的全排列的相关问题
- n个数的排列
- 普通递归算法:输出n个数的所有全排列
- N个数全排列的非递归算法
- 求数组中任意n个数的全排列
- JavaScript获取指定classname的父节点
- 51NOD 1107 斜率小于0的连线数量 坐标离散化+树状数组
- android之TextInputLayout控件介绍和使用
- 集合Vs.流 Streams vs. collections
- FFMpeg框架代码阅读(转)
- n个数的全排列
- const使用方法
- leetcode 396. Rotate Function
- HDFS Users Guide
- 可行性研究报告-机房收费系统
- 【C#拾遗】——Mutex对象深入理解
- Bzoj2595 游览计划 斯坦纳树
- 网络流24题1 飞行员配对方案问题
- 混合高斯模型背景建模原理