当前位置: 首页 > news >正文

1316:【例4.6】数的计数(Noip2001) 代码+解析

1316:【例4.6】数的计数(Noip2001)
【题目描述】
我们要求找出具有下列性质数的个数(包括输入的自然数n
)。先输入一个自然数n(n≤1000),然后对此自然数按照如下方法进行处理:不作任何处理;在它的左边加上一个自然数,但该自然数不能超过原数的一半;加上数后,继续按此规则进行处理,直到不能再加自然数为止。
【输入】
自然数n(n≤1000)。
【输出】
满足条件的数。

【输入样例】
6
【输出样例】
6
【提示】
【样例解释】

满足条件的数为如下所示:

6
16
26
126
36
136

思路:

  • 首先分析: 一个自然数左边加上一个自然数:举例-100,左边加上后可以为50100,,,,2550,,,,,49100,,,24100,,,所以他的数量为1~50这五十个自然数的每次计数之和
  • 由于每个自然数独一无二,左边加上一个自然数就多了该自然数的排列方式,所以可以理解为前n/2个自然数不同排列组成的数的个数之和
  • 由于数据庞大,在使用递归式时可以考虑该数组的值是否已经求了,如果已求,则可以直接跳过,节省运行时间(记忆搜索
  • 如果采用一层for循环的递归方式则会超时:用一个变量去存,由于每次都要从1开始计算,所以会超时
#include<bits/stdc++.h>
using namespace std;
//由于直接每次num(i),只是用sum记忆次数,则会超时,所以选择用记忆的方式,每次计算后存起来 
//记忆搜索(一个if判断数组值是否为0)+递归 
int sum = 0,a[1001];
//定义计数的函数
void num(int m) ;
int main(){int n;cin>>n;num(n);cout<<a[n];return 0;
} 
void num(int m){if(a[m]>0) return;//表示该数值已经求到了a[m]=1;// 自身也是一种情况 for(int i=1;i<=m/2;i++){num(i);//每次都递归一下(避免前面的数未计数) a[m]+=a[i];}
}
http://www.lryc.cn/news/264420.html

相关文章:

  • 征集倒计时 | 2023年卓越影响力榜单-第四届中国产业创新奖报名即将截止
  • vue的语法模板与数据绑定的说明
  • VueCron使用方法
  • SpringBlade export-user SQL 注入漏洞复现
  • 结构体的一些补充知识
  • 20V升26V 600mA升压型LED驱动芯片,PWM调光芯片-AH1160
  • 如何在Go中制作HTTP服务器
  • Linux笔记---系统信息
  • 最新版android stuido加上namespace
  • Wireshark基础及捕获技巧
  • Windows下Navicat15.0连接Oracle11g报ORA-28547解决
  • 21 Vue3中使用v-for遍历对象数组
  • 深入理解Java自定义异常与全局异常处理 @RestControllerAdvice
  • h5页面跳转微信小程序(最简单的方法|URL Scheme)
  • 智能优化算法应用:基于非洲秃鹫算法3D无线传感器网络(WSN)覆盖优化 - 附代码
  • 持续集成交付CICD:Jenkins使用GitLab共享库实现前端项目镜像构建
  • SQL server 数据库 SQL语句高级用法
  • wavlink 路由器 多处前台RCE漏洞复现
  • 互联网中的商品超卖问题及其解决方案:Java中Redis结合UUID的应用
  • mysql:查看线程缓存中的线程数量
  • 线性表,也是Java中数组的知识点!
  • java使用面向对象实现图书管理系统
  • 2023 英特尔On技术创新大会直播 |我感受到的“芯”魅力
  • Atium Designer 23 全新功能-丝印制备,解决DFM问题
  • Nginx快速入门:安装目录结构详解及核心配置解读(二)
  • 测试TensorFlow/PyTorch的GPU版本是否启用
  • 字符串逆序输出
  • 期货平仓日历(期货平仓日期汇总)
  • 计算机网络-进阶
  • LED恒流驱动芯片SM2188EN:满足LED灯具出口欧盟所需的ERP能效认证标准和要求