题目描述:
A A 2 2 3 3 4 4, 一共4对扑克牌。请你把它们排成一行。
要求:两个A中间有1张牌,两个2之间有2张牌,两个3之间有3张牌,两个4之间有4张牌。
请填写出所有符合要求的排列中,字典序最小的那个。
例如:22AA3344 比 A2A23344 字典序小。当然,它们都不是满足要求的答案。
#include<stdio.h>
char puke[8]={'A','A','2','2','3','3','4','4'};
char puke1[8];
int find(char a,int x){
int i;
for(i=x;i<8;i++){
if(puke1[i]==a){
return i;
}
}
}
int main(){
int a,b,c,d,e,f,g,h;
for(a=0;a<8;a++){
puke1[0]=puke[a];
for(b=0;b<8;b++){
if(b==a)continue;
puke1[1]=puke[b];
for(c=0;c<8;c++){
if(c==a||c==b)continue;
puke1[2]=puke[c];
for(d=0;d<8;d++){
if(d==a||d==b||d==c)continue;
puke1[3]=puke[d];
for(e=0;e<8;e++){
if(e==a||e==b||e==c||e==d)continue;
puke1[4]=puke[e];
for(f=0;f<8;f++){
if(f==a||f==b||f==c||f==d||f==e)continue;
puke1[5]=puke[f];
for(g=0;g<8;g++){
if(g==a||g==b||g==c||g==d||g==e||g==f)continue;
puke1[6]=puke[g];
for(h=0;h<8;h++){
if(h==a||h==b||h==c||h==d||h==e||h==f||h==g)continue;
puke1[7]=puke[h];
int i1=find('A',0);
int i2=find('A',i1+1);
int i3=find('2',0);
int i4=find('2',i3+1);
int i5=find('3',0);
int i6=find('3',i5+1);
int i7=find('4',0);
int i8=find('4',i7+1);
//printf("%d %d %d %d %d %d %d %d %d\n",i1,i2,i3,i4,i5,i6,i7,i8);
if((i2-i1)==2&&(i4-i3)==3&&(i6-i5)==4&&(i8-i7)==5) {
for(int i=0;i<8;i++){
printf("%c",puke1[i]);
}
printf("\n");
return 0;
}
}
}
}
}
}
}
}
}
return 0;
}