找规律:发现:某个数的数列个数=数字本身+不超过他的一半 的正整数的数列个数的和
拿数字6举例:
有以下数列:
6
6,3
6,3,1
6,2
6,2,1
6,1
6的数列个数=1(本身)+1的数列个数+2的数列个数+3的数列个数
思路:f [ i ]表示存储数字 i 对应的数列个数。
数字 i 的数列个数等于 1 的数列个数 加上 2 的数列个数一直加到 i / 2 的数列个数 + 1(1是数字自身的情况)
求 f [ n ]
#include<iostream>
using namespace std;
int f[1005] = { 0 };
int bianli(int x)
{
for (int i = 2;i <= x;i++)
{
for (int j = 1;j <= i/2;j++)
{
f[i] += f[j];//累加
}
f[i]++;//再加上自身
}
return f[x];
}
int main()
{
int n;cin >> n;
f[i]=1;
cout<< bianli(n);
}