P1028 [NOIP2001 普及组] 数的计算

Java代码:

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;
        }
    }
}

下面是若干次失败的尝试:

java 复制代码
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);
        }
    }
}
java 复制代码
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;
                }
            }

    }
}
java 复制代码
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;
        }
    }
}
相关推荐
特立独行的猫A5 小时前
用仓颉语言 cj-tauri 框架,五分钟给娃做了个鸿蒙形近字游戏
java·后端·python
I_belong_to_jesus9 小时前
C++关于分支预测的优化1
开发语言·c++·算法
budingxiaomoli12 小时前
Spring统一功能处理
java·后端·spring
Flynn Liang13 小时前
可观测性与成本治理:一次对话的 17 个观测点
java·langchain·可观测性·micrometer·langchain4j·token 成本·llm 监控
金銀銅鐵13 小时前
带您看懂字节码指令(三):同一行加法,为什么有四种指令
java·jvm
Code_Solitude16 小时前
C语言动态内存 + 柔性数组 + 数组名退化
c语言·算法·柔性数组
上海潭龙东海科技有限公司16 小时前
客运站管控之动态孪生技术方案(新增一屏管控模块
数据仓库·人工智能·算法·重构·动态规划
文丑颜不良啊17 小时前
LeetCode2821~2840题目解析
java·leetcode
apcipot_rain18 小时前
C++转Java日记(10)
java·开发语言