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;
        }
    }
}
相关推荐
海石19 分钟前
【JS击败90%】前缀和+定长滑动窗口
算法·leetcode
Tisfy33 分钟前
LeetCode 2685.统计完全连通分量的数量:DFS求每个连通块的边点数
算法·leetcode·深度优先··题解·连通图·全连通分量
海石43 分钟前
1次遍历,空间复杂度击败100%,时间复杂度击败85%
算法·leetcode
沫离痕1 小时前
Cassandra 4.0.11 Docker 安装与配置手册
java·spring boot
plainGeekDev1 小时前
libs 目录 → Gradle 依赖管理
android·java·kotlin
CodeStride1 小时前
就像长跑配速一样,我是如何平衡代码性能与可读性的
java
弹简特1 小时前
【Java项目-企悦抽】07-用户与认证模块-实现用户注册01
java·开发语言
L歪歪君1 小时前
Apache Doris全链路性能优化实战指南:从架构设计到生产落地
java·开发语言·算法
m0_466525291 小时前
从“算法内卷”到“可信易用” 东软多模态医学人工智能平台开启无代码科研新时代
人工智能·算法
山东点狮信息科技有限公司2 小时前
SpringBoot+VUE3,一套系统完成OA+HRM+CRM+MES+合同+项目管理 —— 深度解析点狮全业务管理平台
java·spring boot·后端