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

本文探讨了半数单集问题,详细描述了如何从自然数n生成半数集set(n),并提供了相应的Java编程任务。该集合遵循特定的添加规则,直至无法继续添加元素。例如,set(6)={6,16,26,126,36,136}。任务是计算0<n<2010范围内的半数单集元素个数。"
128314651,13312023,awk命令详解:Linux数据筛选与处理,"['Linux', 'shell脚本', '服务器运维', '文本处理']
1015





