zoukankan      html  css  js  c++  java
  • 【题解】数的计数

    题目描述

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

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

    l、不作任何处理;

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

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

    例如输入6,则符合条件的数有6、16、26、36、126、136。

    输入输出格式

    输入格式:

    一行,即一个自然数n(1≤n≤1000)。

    输出格式:

    一行,即满足条件的数的个数。

    输入输出样例

    输入样例:
    6
    输出样例:
    6
    这道题可以硬解,就用递归做吧
    如果直接递归当然会超时,我们可以用记忆化搜索和数组计数
    先枚举从1到n/2,然后在根据枚举出的结果往下分支,每做一次,数组check[n]就会增加方案数,最后输出check[n]就是我要的结果
    具体程序如下:
    #include<iostream>
    using namespace std;
    int check[1005];
    void add(int n)
    {
        if (check[n]!=0) return;
        check[n]=1;
        for (register int i=1;i<=n/2;i++)
        {
            add(i);
            check[n]+=check[i];
        }
    }
    int main()
    {
        int n;
        cin>>n;
        add(n);
        cout<<check[n];
    }
     
  • 相关阅读:
    JAVA使用POI如何导出百万级别数据
    Excel最多可存多少行,多少列?
    jvm参数调优
    迭代器相应型别
    指向NULL的类
    const T & 的适用范围
    函数前修饰const与函数名后修饰const
    继承中赋值函数的注意点
    string类的简要实现
    malloc/free与new/delete的不同及注意点
  • 原文地址:https://www.cnblogs.com/2021-yanghaoran/p/10716652.html
Copyright © 2011-2022 走看看