//组合
//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 namespace std;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 namespace std;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;}
新闻热点
疑难解答