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;
}