//组合
//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;
}