蓝桥杯几道全排列的题目
【摘要】
方格填数
#include<bits/stdc++.h>
using namespace std;
bool check(vector<int>arr){
if(
ab...
方格填数
#include<bits/stdc++.h>
using namespace std;
bool check(vector<int>arr){
if(
abs(arr[0]-arr[1])==1||
abs(arr[0]-arr[3])==1||
abs(arr[0]-arr[4])==1||
abs(arr[0]-arr[5])==1||
abs(arr[1]-arr[2])==1||
abs(arr[1]-arr[4])==1||
abs(arr[1]-arr[5])==1||
abs(arr[1]-arr[6])==1||
abs(arr[2]-arr[5])==1||
abs(arr[2]-arr[6])==1||
abs(arr[3]-arr[4])==1||
abs(arr[3]-arr[7])==1||
abs(arr[3]-arr[8])==1||
abs(arr[4]-arr[5])==1||
abs(arr[4]-arr[7])==1||
abs(arr[4]-arr[8])==1||
abs(arr[4]-arr[9])==1||
abs(arr[5]-arr[6])==1||
abs(arr[5]-arr[8])==1||
abs(arr[5]-arr[9])==1||
abs(arr[6]-arr[9])==1||
abs(arr[7]-arr[8])==1||
abs(arr[8]-arr[9])==1
){
return false;
}
return true;
}
int main(){
vector<int>arr;
int ans=0;
for(int i=0;i<10;i++){
arr.push_back(i);
}
do{
if(check(arr)){
ans++;
}
}while(next_permutation(arr.begin(),arr.end()));
cout<<ans<<endl;
return 0;
}
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
- 27
- 28
- 29
- 30
- 31
- 32
- 33
- 34
- 35
- 36
- 37
- 38
- 39
- 40
- 41
- 42
- 43
- 44
- 45
- 46
- 47
- 48
- 49
- 50
- 51
- 52
- 53
- 54
- 55
- 56
- 57
- 58
寒假作业
#include<bits/stdc++.h>
using namespace std;
int a[13]={1,2,3,4,5,6,7,8,9,10,11,12,13};
int b[12]; //保存一个全排列
int vis[13];
int ans=0;
void dfs(int level,int num){
if(level==3){
if(b[0]+b[1]!=b[2]){
return;
}
}
if(level==6){
if(b[3]-b[4]!=b[5]){
return;
}
}
if(level==9){
if(b[6]*b[7]!=b[8]){
return;
}
}
if(level==12){
if(b[9]==b[10]*b[11]){
ans++;
}
return;
}
for(int i=0;i<num;i++){
if(!vis[i]){
vis[i]=1;
b[level]=a[i];
dfs(level+1,num);
vis[i]=0;
}
}
}
int main(){
memset(vis,0,sizeof(vis));
dfs(0,13);
cout<<ans<<endl;
return 0;
}
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
- 27
- 28
- 29
- 30
- 31
- 32
- 33
- 34
- 35
- 36
- 37
- 38
- 39
- 40
- 41
- 42
- 43
- 44
注意这一点b[9]==b[10]*b[11]
,不要用b[9]/b[10]==b[11]
手链样式
#include<bits/stdc++.h>
using namespace std;
int main(){
int ans=0;
vector<string>arr; //保存所有str+str
string str="aaabbbbccccc";
do{
int i=0;
for(;i<arr.size();i++){
if(arr[i].find(str)!=string::npos){
break;
}
}
if(i!=arr.size()){
continue;
}
string temp=str+str;
arr.push_back(temp);
reverse(temp.begin(),temp.end());
arr.push_back(temp);
ans++;
}while(next_permutation(str.begin(),str.end()));
cout<<ans<<endl;
}
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
- 27
三羊献瑞
#include<bits/stdc++.h>
using namespace std;
int a[10]={0,1,2,3,4,5,6,7,8,9};
int b[8]; //用于保存一个全排列
int vis[10];
int ans=0;
bool check(int b[]){
int sum=b[0]*10000+b[1]*1000+b[2]*100+b[3]*10+b[4];
int num1=b[5]*1000+b[3]*100+b[2]*10+b[6];
int num2=b[0]*1000+b[1]*100+b[7]*10+b[3];
if(num1+num2==sum){
return true;
}
return false;
}
void dfs(int level,int num){
if(level==8){ //八个数依次为"三羊生瑞气祥辉献"
if(check(b)){
ans++;
for(int i=0;i<8;i++){
cout<<b[i]<<" ";
}
cout<<endl;
}
return;
}
for(int i=0;i<num;i++){
if(!vis[i]){
vis[i]=1;
b[level]=a[i];
dfs(level+1,num);
vis[i]=0;
}
}
}
int main(){
memset(vis,0,sizeof(vis));
dfs(0,10); //level为0,数组中前十个数字
return 0;
}
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
- 27
- 28
- 29
- 30
- 31
- 32
- 33
- 34
- 35
- 36
- 37
- 38
- 39
- 40
- 41
文章来源: blog.csdn.net,作者:开心星人,版权归原作者所有,如需转载,请联系作者。
原文链接:blog.csdn.net/qq_55675216/article/details/125249361
【版权声明】本文为华为云社区用户转载文章,如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱:
cloudbbs@huaweicloud.com
- 点赞
- 收藏
- 关注作者
评论(0)