A A 2 2 3 3 4 4, 一共4对扑克牌。请你把它们排成一行。
要求:两个A中间有1张牌,两个2之间有2张牌,两个3之间有3张牌,两个4之间有4张牌。
请填写出所有符合要求的排列中,字典序最小的那个。
例如:22AA3344 比 A2A23344 字典序小。当然,它们都不是满足要求的答案。
直接根据题目要求写的;
#include<iostream>
#include<cstring>
#include<string>
#include<algorithm>
#include<cstdlib>
#include<cmath>
using namespace std;
int main() {
char s[9]= {'2','2','3','3','4','4','A','A'};
do {
int f1=0,f2=0,f3=0,f4=0;
for(int i=0; i<8; i++) {
for(int j=0; j<8; j++) {
if(i==j) continue;
else {
if(s[i]=='A'&&s[j]=='A'&&abs(i-j)==2) f1=1;
if(s[i]=='2'&&s[j]=='2'&&abs(i-j)==3) f2=1;
if(s[i]=='3'&&s[j]=='3'&&abs(i-j)==4) f3=1;
if(s[i]=='4'&&s[j]=='4'&&abs(i-j)==5) f4=1;
}
}
}
if(f1&&f2&&f3&&f4) break;
} while(next_permutation(s,s+8));
for(int i=0; i<8; i++)
cout<<s[i];
cout<<endl;
return 0;
}