• 博客园logo
  • 会员
  • 众包
  • 新闻
  • 博问
  • 闪存
  • 赞助商
  • HarmonyOS
  • Chat2DB
    • 搜索
      所有博客
    • 搜索
      当前博客
  • 写随笔 我的博客 短消息 简洁模式
    用户头像
    我的博客 我的园子 账号设置 会员中心 简洁模式 ... 退出登录
    注册 登录
Niro Einteson
文可提笔安天下 武可上马定乾坤
博客园    首页    新随笔    联系   管理    订阅  订阅

P1028 数的计算

P1028 数的计算

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

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

不作任何处理;

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

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

输入格式
1个自然数nn(n<=1000)

输出格式
1个整数,表示具有该性质数的个数。

输入输出样例
输入
6
输出
6
说明/提示
满足条件的数为

6,16,26,126,36,136

 

 1 解法:
 2 #include<bits/stdc++.h>
 3 using namespace std;
 4 map<int,int> mp;//保存搜索的结果,优化代码
 5 int n;
 6 int dfs(int x){//深度优先搜索
 7     if(mp[x])   return mp[x];//已经 有这个值了,可以返回
 8     int sum=1;//本身是1
 9     for(int i=1;i<=x/2;i++){
10         sum+=dfs(i);
11     }//对这个数 的每个 都搜索完成之后 ,保存;
12     mp[x]=sum;//如6->6/2=3,搜索1,2,3的和  赋值给mp[6]
13     //由于 mp[i] 是从 mp[1] + ... + mp[i/2] + 1 转移过来的
14     return sum;
15 }
16 int main()
17 {
18     cin>>n;
19     cout<<dfs(n)<<endl;
20     return 0;
21 }
22 //1000  结果:1981471878
posted @ 2019-12-14 18:39  Nirogo  阅读(186)  评论(0)    收藏  举报
刷新页面返回顶部
博客园  ©  2004-2025
浙公网安备 33010602011771号 浙ICP备2021040463号-3