首页 > 其他分享 >P1028 数的计算

P1028 数的计算

时间:2024-01-29 23:12:22浏览次数:22  
标签:count 递归 recur int 计算 include P1028

最开始想到的方法是递归

递归代码在这里!
#include <stdio.h>

int count;
void recur(float n)
{
    if(n/2>=1)
    {
        for(int i=1;i<=n/2;i++)
        {
            count++;
            recur(i);
        }
    }
}

int main()
{
    float n;
    scanf("%f",&n);
    recur(n);
    printf("%d",count+1);
    return 0;
}

但是测评发现大部分会TLE,看了很多大佬的解答,得到了以下两种解决方案:

首先是递归优化,点这里!
#include <stdio.h>

int a[1001]={0};
int recur(int n)
{
    int sum=1;
    if(a[n]!=0)
        return a[n];
//    if(n/2.0>=1)写这个判断发现好像并没有什么用
//    {
        for(int i=1;i<=n/2;i++)
        {
            sum+=recur(i);
        }
        a[n]=sum;
        return a[n];
//    }
}

int main()
{
    int n;
    scanf("%d",&n);
    a[1]=1;
    printf("%d",recur(n));
    return 0;
}

递归的本质就是从上往下,触底才反弹,又从下往上,返回答案,这会导致很多的重复计算,和递推的方向是相反的。如果我们加上一个记忆化搜索(即使用一个数组,存放曾经计算过的结果,下次遇到同样的计算,直接获取结果了),就能解决这个问题了!


然后是递推,再点这里!
#include <stdio.h>

int main()
{
    int n,i;
    int count[1001]={0,1};
    scanf("%d",&n);
    for(i=2;i<=n;i++)
    {
        //找到规律就很简单了:
        //当i为奇数时f[i]=f[i-1],当i为偶数时f[i]=f[i-1]+f[i/2]
        count[i]=count[i-1];
        if(i%2==0)
            count[i]+=count[i/2];
    }
    printf("%d",count[n]);
    return 0;
}

标签:count,递归,recur,int,计算,include,P1028
From: https://www.cnblogs.com/vicky-han/p/17992827

相关文章

  • 三角刨分和面积计算
    1. POJ2986ATriangleandaCircle题意:给定一个三角形,一个圆的圆心和半径,求圆和三角形的面积交 利用三角剖分,计算简单多边形和圆的相交面积三角剖分的步骤:多边形上的每条边都与圆心构成三角形算出每个三角形与圆的相交面积根据有向面积的正负累加到答案中计算每个三......
  • 【面试突击】计算机网络面试实战(下)
    欢迎关注公众号【11来了】,及时收到AI前沿项目工具及新技术的推送!在我后台回复「资料」可领取编程高频电子书!在我后台回复「面试」可领取硬核面试笔记!Https的工作原理Http的内容是明文传输的,铭文数据经过中间代理服务器、路由器、wifi热点等多个物理节点,如果被劫持会导致传输......
  • 计算机职业道德与工程伦理
    一、计算机伦理学概述1.工程的狭义概念工程是以满足人类需求的目标为指向,应用各种相关的知识和技术手段,调动多种自然与社会资源,通过一群人的相互协作,将某些现有实体(自然的或人造的)汇聚并建造为具有预期使用价值的人造产品的过程。工程具有社会性和探索性......
  • 基于 GPU 渲染的高性能空间包围计算
    空间包围检测在计算机图形学、虚拟仿真、工业生产等有着广泛的应用。现代煤矿开采过程中,安全一直是最大的挑战之一。地质空间中存在诸多如瓦斯积聚、地质构造异常、水文条件不利等隐蔽致灾因素,一旦被触发,可能引发灾难性的后果。因此在安全生产过程中有效的管理和规避各隐蔽致灾因......
  • 计算机语言的发展史
    第一代语言机器语言我们都知道计算机的基本计算方式都是基于二进制的方式二进制:01011011101110101010010这种代码是直接输入给计算机使用的,不经过任何的转换!第二代语言汇编语言解决人类无法读懂机器语言的问题指令代替二进制目前应用:逆向工程机器人病毒......
  • 云计算学习day5
    首先学习了如何找文件一共有三种:locate格式:locate文件(夹)优点:块(相当于目录寻找)缺点:不全,会列出所有包含内容的文件,新建的搜不到(需刷新update)which只能用于搜索命令位置$PATH(命令文件)echo$PATH(列出所有命令文件所在的文件夹)which命令=whereis(更详细)find缺点:慢(相......
  • 计算机软件
    计算机软件可以使计算机按照事先预定好的顺序完成特定的功能计算机软件按照其功能划分为系统软件和应用软件系统软件:DOS,Windows,Linux,Android,iOS,Mac应用软件:WPS,QQ,微信,吃鸡,英雄联盟,王者荣耀,绝地求生····软件、开发、软件开发人机交互(图形化界面,命令......
  • 计算机硬件
    一些物理设备按系统结构的要求构成一个有机整体为计算机软件运行提供物质基础。计算机硬件组成CPU主板内存电源、主机箱硬盘显卡键盘、鼠标显示器CPUMemory(内存)Motherboard(主板)IO设备冯·诺伊曼体系结构,又称为普林斯顿结构计......
  • 什么是计算机
    Computer:全称电子计算机,俗称为电脑电脑能够按照程序运行,自动,高速处理海量数据的现代化智能电子设备由硬件和软件两部分组成常见的形式有台式机,笔记本还有大型计算机等等广泛应用到:科学计算【卫星火箭的偏差等】、数据处理【大数据时代,物联网】、自动控制【无人机,无人驾驶汽......
  • 光计算(一): 片上人工智能光计算芯片发展背景
    以下文章来源于知乎:Lightigo作者:Lightigo链接:https://zhuanlan.zhihu.com/p/679642599?utm_campaign=shareopn&utm_medium=social&utm_oi=758427772610682880&utm_psn=1733845535713226752&utm_source=wechat_session本文仅用于学术分享,如有侵权,请联系后台作删文处理前言:今......