题目
Description
给定一个自然数 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)中的元素个数。
Input
每个输入只有 1 行,给出整数 n。
Output
输出1行是半数集 set(n)中的元素个数。
Sample Input
6
Sample Output
6
代码块
//测试数据为多组,好坑啊啊啊啊
import java.util.Arrays;
import java.util.Scanner;
public class Main {
static int[] arrays = new int[100000];
public static void main(String[] args) {
Scanner cn = new Scanner(System.in);
while (cn.hasNext()) {
Arrays.fill(arrays, 0);
int n = cn.nextInt();
System.out.println(halfSet(n));
}
cn.close();
}
private static int halfSet(int n) {
if (arrays[n] > 0)
return arrays[n];
else {
arrays[n] = 1;
for (int i = 1; i <= n / 2; i++)
arrays[n] += halfSet(i);
return arrays[n];
}
}
}