zxjssf

NOIP200101数的计算

题目

 

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;
}

  

 

 

posted @ 2019-07-09 10:47  zxjssf  阅读(303)  评论(0编辑  收藏  举报