题目描述:
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; }