全排列数组实现
#include<bits/stdc++.h>
using namespace std;
//全排列数组递归~~~~~~~~~~~~~~~~~~~~~~~~
char ch[50] = {'a','b','c'};
void f(char aa[],int k)
{
if(k==strlen(aa)-1)
{
for(int i=0;i<strlen(aa);i++)
{
cout<<aa[i];
}
cout<<endl;
return ;
}
for(int i = k;i<strlen(aa);i++)
{
{
char t = aa[k];
aa[k] = aa[i];
aa[i] = t;
}
f(aa,k+1);
{
char t = aa[k];
aa[k] = aa[i];
aa[i] = t;
}
}
}
int main()
{
f(ch,0);
return 0;
}
当然还有更简单的 但是并不是很灵活 //我也不是很懂,为什么数组就更灵活了,可能过程中可以使用某些条件
c++自带全排列算法
#include <bits/stdc++.h>
using namespace std;
int main(void)
{
string s = "abs";
do
{
cout<<s<<endl;
}while(next_permutation(s.begin(),s.end()));
return 0;
}
返回值为是否存在下一个排列 有为1 没有为0
既然有下一个 nxet
那就有上一个
prev_permutation()
用法一样~
顺便做个题 蓝桥某年的填空题
B DEF
A + --- + ------- = 10
C GHI
这个算式中A~I代表0~9的数字,不同的字母代表不同的数字。
比如:
6+8/3+952/714 就是一种解法,
5+3/1+972/486 是另一种解法。
这个算式一共有多少种解法?
注意:你提交应该是个整数,不要填写任何多余的内容或说明性文字。
直接代码~~~~
#include <bits/stdc++.h>
#define maxn 10
using namespace std;
double a[maxn];
int main(void)
{
string s = "123456789";
int num=0;
do
{
for(int i=0;i<s.size();i++)
{
a[i] = s[i] - '0';
}
if((a[0]+a[1]/a[2]+(a[3]*100+a[4]*10+a[5])/(a[6]*100+a[7]*10+a[8]))==10.0){
num++;
}
}while(next_permutation(s.begin(),s.end()));
cout<<num<<endl;
return 0;
}