排列、组合和全排列
来源:互联网 发布:mysql 读法 编辑:程序博客网 时间:2024/06/10 08:37
//组合
//1---5里面5个数选出来3个
#include<iostream>using namespace std;int v[6] = { 0 };int a[4];int sum = 0;void f(int num,int flag, int n){if (n == 3){sum++;for (int l = 0; l < 3; l++)printf("%d ", a[l]);printf("\n");}else{for (int j = 1; j < 6; j++){if (v[j] == 0&&j>flag){a[n] = j;v[j] = 1;f(j+1,j, n + 1);a[n] = 0;v[j] = 0;}}}}int main(){f(0,0, 0);printf("sum=%d", sum);return 0;}
//排列
//在选取的基础上全排列,其实上个代码改一下就行
#include<iostream>using namespace std;int v[6] = { 0 };int a[4];int sum = 0;void f( int num,int n){if (n == 3){sum++;for (int l = 0; l < 3; l++)printf("%d ", a[l]);printf("\n");}else{for (int j = 1; j < 6; j++){if (v[j] == 0 ){a[n] = j;v[j] = 1;f( j, n + 1);a[n] = 0;v[j] = 0;}}}}int main(){f( 0, 0);printf("sum=%d", sum);return 0;}
#include<iostream>using namespacestd;int b[4] = { 1, 2, 3};int v[4] = { 0 };int a[3];void f(int i){if (i == 3){for (int i = 0; i < 3; i++)printf("%d ", b[i]);printf("\n"); }else{for (int j = i; j < 3; j++){swap(b[i], b[j]);f(i + 1);swap(b[i], b[j]);}}}int main(){f( 0);return 0;}
这里如果数字是1 2 2 ,就会出现重复。接下来给个去重便可
#include<iostream>using namespacestd;int b[4] = { 1, 2, 2};int v[4] = { 0 };int a[3];int pd(int i, int j){for (int k = i; k < j;k++)if (b[k] == b[j])return 0;return 1;}void f(int i){if (i == 3){for (int i = 0; i < 3; i++)printf("%d ", b[i]);printf("\n"); }else{for (int j = i; j < 3; j++){if (pd(i, j)){swap(b[i], b[j]);f(i + 1);swap(b[i], b[j]);}}}}int main(){f( 0);return 0;}
0 0
- 排列、组合和全排列
- 全排列和组合
- 组合和全排列
- 全排列和全组合
- 全组合和全排列
- lua实现全排列和组合排列
- 全排列和组合问题
- 全组合 全排列
- 全排列和全组合的问题
- 字符串的全排列和全组合
- 递归输出全排列和全组合
- 全排列和全组合实现
- 全排列和全组合实现
- 全排列和全组合实现
- 全排列和全组合实现
- 全排列和全组合实现
- 组合全排列
- 组合全排列算法
- Android线程安全问题总结
- 排序类
- java设计模式--观察者模式应用场景
- voice channel 0 circular buffer overflow问题的解决办法GlobalOffensive,CSGO
- Java装箱拆箱
- 排列、组合和全排列
- 【Pandas-Cookbook】07:数据清洗
- QT设置窗体透明
- title与h3的区别、b与strong的区别、i与em的区别?
- 2016年总结和2017年规划
- 计算机网络知识点
- echarts设置地图大小比例,大小设置
- JS中的基本数据类型(1)
- 在Eclipse中如何开启断言(Assert)