#include<cstdio>const int maxn=80+2;int S[maxn];int n,L,count;void PRint(int cur){ int flag=1; for(int i=0;i<cur;i++){ if(i%4==0 && i>0) { if(i%64==0 && i>0)printf("/n"); else printf(" "); } printf("%c",S[i]+'A'); } printf("/n%d/n",cur);}int dfs(int cur){ if(count++==n){ print(cur); //打印目標(biāo)字符串 return 0; //返回值為0,則表示找到目標(biāo)串 } for(int i=0;i<L;i++){ //嘗試前L個(gè)字母 S[cur]=i; int ok=1; for(int len=1;len<=(cur+1)/2;len++){ int equal=1; for(int j=0;j<len;j++){ if(S[cur-j]!=S[cur-j-len]){ equal=0;break;} //檢查前一半是否等于后一半 } if(equal){ok=0; break;} } if(ok){if(!dfs(cur+1))return 0;} //遞歸搜索,如果已經(jīng)找到解,則直接退出 } return 1;}int main(){ while(scanf("%d%d",&n,&L)==2){ if(n==0 && L==0)break; count=0; //表示第n個(gè)困難的串 dfs(0); } return 0;}
新聞熱點(diǎn)
疑難解答
圖片精選
網(wǎng)友關(guān)注