zoukankan      html  css  js  c++  java
  • 半数集和半数单集问题

    <<问题描述: 给定一个自然数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 #include <iostream>
     2 #include <conio.h>
     3 using namespace std;
     4 
     5 const int MAX = 1000;
     6 
     7 int HalfSet(int n);
     8 int a[MAX]={0};
     9 
    10 int main()
    11 {
    12     int n=6;
    13     int sum = 0;
    14     while(cin>>n)
    15     {
    16         sum=HalfSet(n);
    17         cout<<sum<<endl;
    18     }
    19     return 0;
    20 }
    21 
    22 int HalfSet(int n)
    23 {
    24     if(a[n]>0)
    25         return a[n];
    26     else
    27     {
    28         a[n]=1;
    29         for(int i=1;i<=n/2;i++)
    30             a[n]+=HalfSet(i);
    31         return a[n];
    32     }
    33 }
  • 相关阅读:
    java中的Set的使用以及各种遍历方法(较为全面)
    系统图标
    监听按钮
    GUI
    【Avalon】获取隐藏元素的尺寸
    Hooks
    特性节点Attribute
    ngCloak
    邮件
    时间
  • 原文地址:https://www.cnblogs.com/hxsyl/p/2946018.html
Copyright © 2011-2022 走看看