问题描述:
给定一个自然数 n,由 n 开始可以依次产生半数集 set(n)中的数如下。
(1) n∈set(n);
(2) 在 n 的左边加上一个自然数,但该自然数不能超过最近添加的数的一半;
(3) 按此规则进行处理,直到不能再添加自然数为止。
例如,set(6)={6,16,26,126,36,136}。半数集 set(6)中有 6 个元素。
注意半数集是多重集。
编程任务:
对于给定的自然数 n,编程计算半数集 set(n)中的元素个数。
数据输入:
只有 1 行,给出整数 n。(0<n<1000)
输入样例:
6
结果输出:
输出半数集 set(n)中的元素个数
输出样例:
6
递归——效率低
#include<bits/stdc++.h>
using namespace std;
int Half(int n)
{
int sum=1; //n本身
if