题意:输入 n 和 l,要求输出前 l 个字母组成的第 n 个不含有连续的重复序列的字符串。
#include<iostream> #include<cmath> #include<cstring> #include<cstdio> #include<algorithm> using namespace std; int n, l, cnt, f; //第cnt个序列 char ans[85]; void dfs(int cur){ //当前搜索到第cur位 if(cnt == n){ f = 1; int a = 0, b = 0; for(int i = 0; i < cur; i++){ if(a == 4 && b != 16){ cout << " "; a = 0; }if(b == 16){ cout << endl; a = b = 0; } printf("%c", ans[i]+'A'); a++; if(a == 4) b++; } cout << endl << cur << endl; return; } for(int i = 0; i < l; i++){ ans[cur] = i; int flag = 0; for(int j = 1; j <= (cur+1)/2; j++){ //重复序列的元素个数 flag = 1; for(int k = 0; k < j; k++){ if(ans[cur-k] != ans[cur-k-j]){ flag = 0; break; } } if(flag) break; } if(flag) continue; cnt++; if(f) return; dfs(cur+1); } } int main(){ //freopen("a.txt", "r", stdin); while(scanf("%d %d", &n, &l) != EOF && n && l){ //memset(ans, 0, sizeof(ans)); cnt = 0; f = 0; dfs(0); } }