Java代码:
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner sc=new Scanner(System.in);
int num= sc.nextInt();
int arr[]=new int[1001];
for (int i = 0; i < arr.length; i++) {
arr[i]=0;
}
System.out.println(fa(num,arr));
}
public static int fa(int num,int arr[]){
if(num==1) return 1;
else {
int sum=0;
for (int i = 1; i <= num/2; i++) {
//如果存在
if(arr[i]!=0)
sum+=arr[i];
//如果不存在
if (arr[i]==0)
sum+=fa(i,arr);
}
//如果不存在就变成存在
if(arr[num]==0)
arr[num]=sum+1;
return sum+1;
}
}
}
下面是若干次失败的尝试:
import java.util.Scanner;
public class Main {
static int n=0;
public static void main(String[] args) {
Scanner sc=new Scanner(System.in);
int num=sc.nextInt();
fa(num);
System.out.println(n);
}
public static void fa(int num){
n++;
if(num==1) return;
for (int i = 1; i <= num/2; i++) {
fa(i);
}
}
}
import java.util.Scanner;
public class Main {
static int n=0;
public static void main(String[] args) {
Scanner sc=new Scanner(System.in);
int num=sc.nextInt();
int arr[]=new int[num/2+1];
for (int i = 0; i < arr.length; i++) {
arr[i]=0;
}
fa(num,arr);
System.out.println(n);
}
public static void fa(int num,int arr[]){
//已知的话不必n++,逐个向下了
//也就是进入到已知就直接用已知的数
//arr[num]是已知的
//比如arr[4]就是4的所有向下的点的个数,包括四自己
if(num<arr.length&&arr[num]!=0){
n+=arr[num];
return;//不必向下了
}
//下面是未知的部分
//就需要我们把未知的变成已知的
//计算就不那么繁琐了
n++;
if(num==1) return;
for (int i = 1; i <= num/2; i++) {
fa(i,arr);
if(arr[i]!=0){
arr[i]=n;
}
}
}
}
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner sc=new Scanner(System.in);
int num= sc.nextInt();
System.out.println(fa(num));
}
public static int fa(int num){
if(num==1) return 1;
else {
int sum=0;
for (int i = 1; i <= num/2; i++) {
sum+=fa(i);
}
return sum+1;
}
}
}