题目
NOIP200101数的计算F406 |
难度级别:A; 运行时间限制:1000ms; 运行空间限制:51200KB; 代码长度限制:2000000B |
试题描述
|
我们要求找出具有下列性质数的个数(包含输入的自然数n):先输入一个自然数n(n<=1000),然后对此自然数按照如下方法进行处理:
1.不作任何处理; 2.在它的左边加上一个自然数,但该自然数不能超过原数的一半; 3.加上数后,继续按此规则进行处理,直到不能再加自然数为止. |
输入
|
仅包含一个数n
|
输出
|
一个数,表示满足题目描述性质的数的个数。
|
输入示例
|
6
|
输出示例
|
6
|
其他说明
|
样例说明:满足条件的数为 6 16 26 126 36 136
|
分析
这道题在noip中,算一道比较水的题。它可以用许多方法实现。我在这里打了一个递归。每次递归在当前数的后面再加数。每次循环n/2
代码
#include <bits/stdc++.h> using namespace std; int n,cnt=0 //cnt记录结果; int f(int x) { for(int i=1;i<=x/2/*原数的一半*/;i++) { cnt++; //计数器++ f(i); //开始递归,也就是题里所说的在原数后面加一个自然数。 } return cnt; //返回 } int main() { cin>>n; cout<<f(n)+1; //加一是因为要加上原数本身。 return 0; }