• 洛谷P1028 数的计算


    题目描述

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

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

    1. 不作任何处理;

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

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

    输入格式

    111个自然数nnn(n≤1000n le 1000n1000)

    输出格式

    111个整数,表示具有该性质数的个数。

    输入输出样例

    输入
    6
    
    输出
    6
    

    说明/提示

    满足条件的数为

    6,16,26,126,36,136

    这题用简单递推就可以做出来了(找规律)

    /*
    递推法
    举个例n=12
    每一轮大循环打印一次数组的结果如下(循环了11次,为1时答案唯一直接存了):
    0 1 2 0 0 0 0 0 0 0 0 0 0
    0 1 2 2 0 0 0 0 0 0 0 0 0
    0 1 2 2 4 0 0 0 0 0 0 0 0
    0 1 2 2 4 4 0 0 0 0 0 0 0
    0 1 2 2 4 4 6 0 0 0 0 0 0
    0 1 2 2 4 4 6 6 0 0 0 0 0
    0 1 2 2 4 4 6 6 10 0 0 0 0
    0 1 2 2 4 4 6 6 10 10 0 0 0
    0 1 2 2 4 4 6 6 10 10 14 0 0
    0 1 2 2 4 4 6 6 10 10 14 14 0
    0 1 2 2 4 4 6 6 10 10 14 14 20
    12/2=6
    12的左边可以为1 2 3 4 5中的数,所以f[12]=f[1]+f[2]+f[3]+f[4]+f[5]+f[6]+1(这个1是加上本身)
    既f[12]=1+2+2+4+4+6+1=20
    所以得到递推公式
    f[n]=f[1]+f[2]+.....+f[n/2]+1;
    */
    #include<stdio.h>
    #include<iostream>
    using namespace std;
    int f[1001]= {0,1};
    void solve(int n)
    {
        
        for(int i=2; i<=n; i++)
        {
            for(int j=1; j<=i/2; j++)
                f[i]+=f[j];
            
            f[i]++;
        }
    }
    int main()
    {
        int n;
        cin>>n;
        solve(n);
        cout<<f[n]<<endl;
        return 0;
    }
  • 相关阅读:
    Spring MVC(一)
    Spring-IOC总结
    IT
    Spring基础
    Maven
    Ajax笔记
    数据库和SQL语言
    JDBC
    拦截器
    文件上传
  • 原文地址:https://www.cnblogs.com/tp25959/p/11408674.html
Copyright © 2020-2023  润新知