题目背景
无
题目描述
我们要求找出具有下列性质数的个数(包含输入的自然数n):
先输入一个自然数n(n<=1500001),然后对此自然数按照如下方法进行处理:
1.不作任何处理;
2.在它的左边加上一个自然数,但该自然数不能超过原数的一半;
3.加上数后,继续按此规则进行处理,直到不能再加自然数为止.
输入输出格式
输入格式:
一个自然数n(n<=1500000)
输出格式:
一个整数,表示具有该性质数的个数。
输入输出样例
说明
高精加。。。。。。
思路:递推。
#include<cstdio> #include<cstring> #include<iostream> #include<algorithm> using namespace std; int n; int f[1500011]; int main(){ scanf("%d",&n); for(int i=0;i<=n;i++) f[i]=1; for(int i=2;i<=n;i++){ for(int j=1;j<=i/2;j++) f[i]+=f[j]; } cout<<f[n]; }
#include<cstdio> #include<cstring> #include<iostream> #include<algorithm> using namespace std; int n; int f[1500011]; int main(){ scanf("%d",&n); f[0]=1;f[1]=1;f[2]=2; f[3]=2;f[4]=4;f[5]=4; for(int i=6;i<=n;i++) f[i]=f[i-2]+f[i/2]; cout<<f[n]; }