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;
        }
    }
}
相关推荐
御风@户外4 分钟前
质数生成函数、质数判断备份
算法·acm
Cosmoshhhyyy6 分钟前
LeetCode:3083. 字符串及其反转中是否存在同一子字符串(哈希 Java)
java·leetcode·哈希算法
闻缺陷则喜何志丹18 分钟前
【C++动态规划】1105. 填充书架|2104
c++·算法·动态规划·力扣·高度·最小·书架
AI人H哥会Java20 分钟前
【Spring】基于XML的Spring容器配置——<bean>标签与属性解析
java·开发语言·spring boot·后端·架构
Dong雨29 分钟前
六大排序算法:插入排序、希尔排序、选择排序、冒泡排序、堆排序、快速排序
数据结构·算法·排序算法
开心工作室_kaic30 分钟前
springboot493基于java的美食信息推荐系统的设计与实现(论文+源码)_kaic
java·开发语言·美食
缺少动力的火车32 分钟前
Java前端基础—HTML
java·前端·html
达帮主38 分钟前
7.C语言 宏(Macro) 宏定义,宏函数
linux·c语言·算法
loop lee39 分钟前
Redis - Token & JWT 概念解析及双token实现分布式session存储实战
java·redis