蓝桥杯备考冲刺必刷题(C++) | 计算函数值

学习C++从娃娃抓起!记录下蓝桥杯备考比赛学习过程中的题目,记录每一个瞬间。

附上汇总贴:蓝桥杯备考冲刺必刷题(C++) | 汇总-CSDN博客


【题目描述】
在一个神秘的世界中,存在一个传说中的神秘花园,被认为拥有无限的知识。但要进入这个花园,你必须解决花园入口处的一道神秘数学难题。这个难题与一个特殊的数学函数相关,称为“神秘函数”。
神秘函数 S ( x ) S(x) S(x)的定义如下:

  • x x x 0 0 0时, S ( 0 ) = 1 S(0)=1 S(0)=1
  • x x x为偶数时, S ( x ) = S ( x / 2 ) S(x)=S(x/2) S(x)=S(x/2)
  • x x x为奇数时, S ( x ) = S ( x − 1 ) + 1 S(x)=S(x-1)+1 S(x)=S(x1)+1

你需要编写一个程序,计算给定正整数 x x x,神秘函数 S ( x ) S(x) S(x)的值。只有当你正确解决了这道难题,才能获得通行证,进入神秘花园探索其中的知识宝藏。
【输入】
输入包含一个正整数 x ( 1 ≤ x ≤ 1 0 6 ) x(1\le x\le 10^6) x(1x106),表示你要解决的神秘函数问题。
【输出】
输出一个整数,表示神秘函数 S ( x ) S(x) S(x)的值,即你成功解决问题后得到的答案。
【输入样例】

7

【输出样例】

4

【代码详解】
[图片]

#include <bits/stdc++.h>
using namespace std;
int n;
int a[1000006];
int main()
{
    cin >> n;
    a[0] = 1;
    for (int i=1; i<=1000000; i++) {  // 预处理所有x对应的S(x)
        if (i%2==0) a[i] = a[i/2];
        else a[i] = a[i-1] + 1;
    }
    cout << a[n] << endl;  // 直接输出答案
    return 0;
}

【运行结果】

7
4
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值