[2001年NOIP普及组] 数的计算

我们要求找出具有下列性质数的个数(包含输入的自然数n):
先输入一个自然数n(n<=1000),然后对此自然数按照如下方法进行处理:
1.不作任何处理;
2.在它的左边加上一个自然数,但该自然数不能超过原数的一半;
3.加上数后,继续按此规则进行处理,直到不能再加自然数为止。
输入
输入一个自然数n(n<=1000)
输出
满足条件的数
样例输入
6
样例输出
6

当输入为6时
符合条件的数有
6
16
26
36
126
136
采用递归的思维解决
#include<iostream>

using namespace std;

int Counter;

void WOK(int s)
{
    if(s>1)//当最左边的数>1时
    {
        for(int i=1;i<=s/2;++i)//枚举递归在在左边的所有情况
        {
            Counter++;//不做任何处理的情况
            WOK(i);
        }    
    }
}

int main()
{
    int a;
    
    cin>>a;
    
    WOK(a);
    
    cout<<Counter+1;//加上输入的数字
    
    return 0;
} 

 

posted @ 2022-08-15 11:35  Cirpt  阅读(70)  评论(0)    收藏  举报