从三个元素的集合[A,B,C]中选取元素生成一个N个字符组成的序列,使得没有两个相邻字的子序列(子序列长度=2)相同。例:N = 5时ABCBA是合格的,而序列ABCBC与ABABC是不合格的,因为其中子序列BC,AB是相同的。
对于由键盘输入的N(1<=N<=12),求出满足条件的N个字符的所有序列和其总数。
测试数据:
输入:4
输出:72
#include <iostream>
using namespace std;
char letter[3] = {'A', 'B', 'C'};
int n, number = 0;
bool judge(string str) {
if(str.size() < 4) {
return true;
}
for (int i = 0; i < str.size() - 3; ++i) {
if(str[i] == str[i + 2] && str[i + 1] == str[i + 3]) {
return false;
}
}
return true;
}
void substring(string str) {
if(str.length() == n) {
cout << str << ends;
number++;
return;
}
for (char i : letter) {
str += i;
if(judge(str)) {
substring(str);
}
str = str.substr(0, str.length() -1);
}
}
int main() {
cin >> n;
string str;
substring(str);
cout << number;
}