学习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(x−1)+1。
你需要编写一个程序,计算给定正整数
x
x
x,神秘函数
S
(
x
)
S(x)
S(x)的值。只有当你正确解决了这道难题,才能获得通行证,进入神秘花园探索其中的知识宝藏。
【输入】
输入包含一个正整数
x
(
1
≤
x
≤
1
0
6
)
x(1\le x\le 10^6)
x(1≤x≤106),表示你要解决的神秘函数问题。
【输出】
输出一个整数,表示神秘函数
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