C++半数集问题

C++半数集问题

Scroll Down

QHQ-【问题描述】给定一个自然数n,由n开始可以依次产生半数集set(n)中的数如下:

(1)n∈set(n);

(2)在n的左边加上一个自然数,但该自然数不能超过最近添加的数的一半;

(3)按此规则进行处理,直到不能再添加自然数为止。


    【问题描述】给定一个自然数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)。
    【输出形式】只有1行,给出半数集set(n)中的元素个数。
    【样例输入】
    
    6
    【样例输出】
    6

    #include<iostream>
    using namespace std;
    int my_set(int n)
    {
    	int set_count = 1;
    	if (n == 1)
    		return 1;
    	else
    	{
    		int i = 1;
    		while (i <= (n / 2))
    		{
    			set_count = set_count + my_set(i);
    			i++;
    		}
    
    		return set_count;
    	}
    }
    
    int main()
    {
    	int n = 0;
    	cin >> n;
    	cout << my_set(n);
    }