字符序列

来源:互联网 发布:6120c软件下载 编辑:程序博客网 时间:2024/05/16 11:10

Problem Description

从三个元素的集合[A,B,C]中选取元素生成一个N个字符组成的序列,使得没有两个相邻字的子序列(子序列长度=2)相同。例:N=5时ABCBA是
合格的,而序列ABCBC与ABABC是不合格的,因为其中子序列BC,AB是相同的。
对于由键盘输入的N(1<=N<=12),求出满足条件的N个字符的所有序列总数。

Input

输入有多组数据,每组数据只有一行为一个整数N。

Output

对于每组数据满足条件的N个字符的所有序列总数

Sample Input

4

Sample Output

72
//简单深搜#include<iostream>#include<stdio.h>#include<string>using namespace std;int cnt, n, a[15];void dfs(int x){    if(x > n)    {        cnt++;        return;    }    int i;    for(i = 1; i <= 3; i++)    {        a[x] = i;        if(!(a[x - 3] == a[x - 1] && a[x - 2] == a[x]))//相邻的两个字符不等            dfs(x + 1);        a[x] = 0;    }}int main(){    int i, j, k;    while(scanf("%d", &n) != EOF)    {        cnt = 0;        memset(a, 0, sizeof(a));        if(n == 1) printf("3\n");        else  if(n == 2) printf("9\n");        else if(n == 3) printf("27\n");        else        {            for(i = 1; i <= 3; i++)//枚举            {                for(j = 1; j <= 3; j++)                {                    for(k = 1; k <= 3; k++)                    {                        a[1] = i, a[2] = j, a[3] = k;                        dfs(4);                    }                }            }            printf("%d\n", cnt);        }    }    return 0;}


0 0