问题简述
给你一个正整数,可以分为分别由1、2或3组成,求有多少种求法。
思路
一开始,我是一个一个循环慢慢求方法数,先有零个3,零个2,为一种,零个3,一个2为一种以此类推慢慢计数,最终求出方法数,写出来后,但最后超时了。然后就想换另一种方法,但是想了好久都没想出来……然后我就列了几组数据找规律,1到5方法数都是它本身,6的方法数为7,之后每6个数字为一组,7的方法数为1的方法数加7,8的方法数为2的方法数加8,……n的方法数为(n-6)的方法数加n,(其实说实话我也不知道这个规律是什么意思,感觉自己水了一道题,有点难受…只好等师兄题解了)找到这个规律后运用递推可以求出n的方法数。
AC通过的C++语言程序如下:
#include<iostream>
using namespace std;
int f(int );
int main()
{
int a;
while (cin >> a)
{
if (a % 6 == 0) cout << f(a) + 1 << endl;
else cout << f(a) << endl;
}
return 0;
}
int f(int x)
{
if (x <= 6) return x;
else return (f(x - 6) + x);
}