从三个元素的集合[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; }
123456789101112131415161718192021222324252627282930313233343536373839