算法设计与分析: 2-6 半数单集问题

2-6 半数单集问题


问题描述

给定一个自然数n,由n开始可以依次产生半数集set(n)中的数如下:
(1)set(n)中包含n;
(2)在n的左边加上一个自然数,但该自然数不能超过最近添加的数的一半;
(3)按此规则进行处理,直至不能添加自然数为止。
例如,set(6)={6,16,26,126,36,136}。
注意:该半数集不是多重集。集合中已经有的元素不再添加到集合中。

编程任务:对于给定的自然数 0 < n < 201 ,编程计算半数单集set(n)中元素的个数。


Java

import java.util.Scanner;

public class Main {
    private static int[] countArray = new int[1001];

    public static void main(String[] args) {
        Scanner input = new Scanner(System.in);
        int number;
        int count;
        countArray[1] = 1;

        while (true){
            System.out.println("Please input a number: ");

            number = input.nextInt();
            count = halfNumber(number);

            System.out.println("There are "+count+" elements!");
            System.out.println("----------------------------");
        }
    }

    private static int halfNumber(int number){
        int count = 1;
        if(countArray[number] > 0)
            return countArray[number];

        for(int i=1; i<=number/2; i++){
            count += halfNumber(i);
            if((i > 10) && (2*(i/10) <= i%10))
                count -= countArray[i/10];
        }
        countArray[number] = count;

        return count;
    }
}

Output

Please input a number: 
6
There are 6 elements!
----------------------------
Please input a number: 
10
There are 14 elements!
----------------------------
Please input a number: 
26
There are 112 elements!
----------------------------
Please input a number: 
27
There are 112 elements!
----------------------------
Please input a number: 
28
There are 137 elements!
----------------------------
Please input a number: 
29
There are 137 elements!
----------------------------
Please input a number: 
30
There are 162 elements!
----------------------------
Please input a number: 
999
There are 1909569818 elements!
----------------------------
Please input a number: 
1000
There are 1935307970 elements!
----------------------------
Please input a number: 

Reference

王晓东《计算机算法设计与分析》(第3版)P43

猜你喜欢

转载自blog.csdn.net/ioio_/article/details/80961951
2-6