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;
        }
    }
}
相关推荐
Coder_Boy_1 分钟前
Deeplearning4j+ Spring Boot 电商用户复购预测案例中相关概念
java·人工智能·spring boot·后端·spring
css趣多多3 分钟前
add组件增删改的表单处理
java·服务器·前端
雨中飘荡的记忆5 分钟前
Spring Batch实战
java·spring
goodluckyaa5 分钟前
LCR 006. 两数之和 II - 输入有序数组
算法
孤狼warrior6 分钟前
YOLO目标检测 一千字解析yolo最初的摸样 模型下载,数据集构建及模型训练代码
人工智能·python·深度学习·算法·yolo·目标检测·目标跟踪
Java后端的Ai之路12 分钟前
【Spring全家桶】-一文弄懂Spring Cloud Gateway
java·后端·spring cloud·gateway
devmoon14 分钟前
在 Polkadot Runtime 中添加多个 Pallet 实例实战指南
java·开发语言·数据库·web3·区块链·波卡
野犬寒鸦17 分钟前
从零起步学习并发编程 || 第七章:ThreadLocal深层解析及常见问题解决方案
java·服务器·开发语言·jvm·后端·学习
云姜.21 分钟前
java抽象类和接口
java·开发语言
带刺的坐椅21 分钟前
Claude Code Skills,Google A2A Skills,Solon AI Skills 有什么区别?
java·ai·solon·a2a·claudecode·skills