Problem Description
从三个元素的集合[A,B,C]中选取元素生成一个N个字符组成的序列,使得没有两个相邻字的子序列(子序列长度=2)相同。例:N=5时ABCBA是合格的,而序列ABCBC与ABABC是不合格的,因为其中子序列BC,AB是相同的。
对于由键盘输入的N(1<=N<=12),求出满足条件的N个字符的所有序列总数。
对于由键盘输入的N(1<=N<=12),求出满足条件的N个字符的所有序列总数。
Input
输入有多组数据,每组数据只有一行为一个整数N。
Output
对于每组数据满足条件的N个字符的所有序列总数
Sample Input
4
Sample Output
72
#include<stdio.h> #include<string.h> int cnt,ch[15],n; bool pd(int m) { if(ch[m-3]==ch[m-1]&&ch[m-2]==ch[m]) return false; return true; } void dfs(int m) { if(m>n) { cnt++; return; } int i; for(i=1;i<=3;i++) { ch[m]=i; if(pd(m)) dfs(m+1); ch[m]=0; } } int main() { //freopen("b.txt","r",stdin); while(scanf("%d",&n)==1) { cnt=0; memset(ch,0,sizeof(ch)); if(n==1) {printf("3\n");continue;} if(n==2) {printf("9\n");continue;} if(n==3) {printf("27\n");continue;} int i,j,k; for(i=1;i<=3;i++) { for(j=1;j<=3;j++) { for(k=1;k<=3;k++) { ch[1]=i;ch[2]=j;ch[3]=k; dfs(4); } } } printf("%d\n",cnt); } return 0; }