c语言 图形变换题,解法类似于树状图

问题描述:

图形变换
描述
图形变换的方式有平移,旋转,缩放,对称四种形式。老师请小明帮忙写一个程序计算图形变换的方案。假设老师希望对图形进行n次变换,图形变换的规律是:
1)如果本次采用平移变换,则下次采用旋转变换;
2)如果本次采用缩放变换,则下次采用对称变换;
3)如果本次采用旋转变换,则下次要么采用平移变换,要么采用对称变换;
4)如果本次采用对称变换,则下次要么采用旋转变换,要么采用缩放变换;
假设图形的第一次变换是平移,请问:有多少种可能的变换方案?

输入
一个正整数n(1≤n≤10000),代表对图形进行n次变换。

输出
一个正整数,表示符合上述所给变换方式的图形变换方案总数。考虑到这个结果可能会很大,因此你只需要输出对19260817取模的值即可。


#include<iostream>
using namespace std;
int count(int num,int m)
{
    long long sum = 0;
    if (m > 1)
    {
        switch (num)
        {
        case 1://平移
        {
            sum += count(2, m - 1);
            break;
        }
        case 2://旋转
        {
            sum += count(1, m - 1);
            sum += count(4, m - 1);
            break;
        }
        case 3: //缩放
        {
            sum += count(4, m - 1);
            break;
        }
        case 4://对称
        {
            sum += count(2, m - 1);
            sum += count(3, m - 1);
            break;
        }
        }
        return sum;
    }
    else if (m == 1)return 1;
    else return 0;
}
int main()
{
    int num;
    cin >> num;
    cout << count(1, num) % 19260817;
}