1415. [NOIP2001]数的计数

☆   输入文件:nums.in   输出文件:nums.out   简单对比
时间限制:1 s   内存限制:256 MB

【题目描述】

  我们要求找出具有下列性质数的个数(包含输入的自然数n):

先输入一个自然数n(n≤1000),然后对此自然数按照如下方法进行处理

l·不作任何处理:

2·在它的左边加上一个自然数,但该自然数不能超过原数的一半;

3·加上数后,继续按此规则进行处理,直到不能再立生自然数为止。

 

【输入格式】

       自然数n

【输出格式】

       满足条件的数的个数

【样例输入】

6

【样例输出】

6

【数据范围及提示】

       如题中所说,1<=n<=1000

【来源】

思路:

当我第一眼看到这个题的时候我就大吃一惊,因为我夏令营的时候做过原题,但仔细看看好像有些不同,这个只是让你输出最终结果,没有让你输出每种情况。但是我犯了一个错误,就是按照原来做的思路枚举每种情况的方式去把这个题转换成一个类似数据结构的题。但是这道题是有规律的,第i个数,就是前i/2个数所有情况之和,再加上本身…….

 1 #include<iostream>
 2 #include<cstdio>
 3 using namespace std;
 4 int main()
 5 {
 6     freopen("nums.in","r",stdin);
 7     freopen("nums.out","w",stdout);
 8     int a[1001],n;
 9     cin>>n;
10     a[1]=1;
11     for(int s=2;s<=n;s++)
12     {
13         a[s]=0;
14         for(int i=1;i<=s/2;i++)
15         {
16             a[s]+=a[i];
17         }
18         a[s]++;
19     }
20     cout<<a[n];
21     return 0;
22 }
View Code

 

posted @ 2017-03-16 09:46  自为风月马前卒  阅读(218)  评论(0编辑  收藏  举报

Contact with me