递归算法(一)

一、大水题

复制代码
import java.util.Scanner;

public class Main {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        long n = sc.nextLong();
        if(n % 9 == 0){
            System.out.println(9);
        }else{
            System.out.println(n % 9);
        }
    }
}

运行结果

二、小q的数列

复制代码
import java.util.Scanner;

public class Main {
    public static void main(String[] args) {
        Scanner in = new Scanner(System.in);
        int T = in.nextInt();
        while (T-- > 0) {
            long n = in.nextLong();
            int cnt = 0;
            long tmp = n;
            // 手写统计二进制中1的个数
            while (tmp > 0) {
                cnt++;
                tmp = tmp & (tmp - 1);
            }
            long first = (1L << cnt) - 1;
            System.out.println(cnt + " " + first);
        }
    }
}

运行结果

三、括号匹配深度

复制代码
import java.util.Scanner;

public class Main {
    public static void main(String[] args) {
        Scanner in = new Scanner(System.in);
        String s = in.next();
        int cur = 0;
        int maxDepth = 0;
        for (int i = 0; i < s.length(); i++) {
            char c = s.charAt(i);
            if (c == '(') {
                cur++;
                if (cur > maxDepth) {
                    maxDepth = cur;
                }
            } else {
                cur--;
            }
        }
        System.out.println(maxDepth);
    }
}

运行结果

四、斐波那契数列

复制代码
import java.util.Scanner;

public class Main {
    public static void main(String[] args) {
        Scanner in = new Scanner(System.in);
        int k = in.nextInt();
        final int MOD = 1000000007;
        if (k == 1 || k == 2) {
            System.out.println(1);
            return;
        }
        long a = 1, b = 1;
        long ans = 0;
        for (int i = 3; i <= k; i++) {
            ans = (a + b) % MOD;
            a = b;
            b = ans;
        }
        System.out.println(ans);
    }
}

运行结果

五、计算阶乘

复制代码
import java.util.Scanner;

public class Main {
    public static void main(String[] args) {
        Scanner in = new Scanner(System.in);
        final int MOD = 1000000007;
        final int MAX = 1000000;
        long[] fac = new long[MAX + 1];
        fac[0] = 1;
        for (int i = 1; i <= MAX; i++) {
            fac[i] = fac[i - 1] * i % MOD;
        }
        int T = in.nextInt();
        while (T-- > 0) {
            int n = in.nextInt();
            System.out.println(fac[n]);
        }
    }
}

运行结果

相关推荐
SL_staff36 分钟前
私有化低代码不是减配版开发:JVS双模式建模如何重建IT交付信任
java·低代码·spring cloud
墨着染霜华1 小时前
Redocly 生成 OpenAPI 接口文档踩坑实录|Node 版本兼容 + 接口地址错误问题解决
java
文丑颜不良啊1 小时前
LeetCode1881~1990题目解析
java·leetcode
Julien20041 小时前
管理机密(一)
运维·服务器·开发语言·学习方法
Chen_harmony1 小时前
七、STL与string类
开发语言·c++
沐晓时光1 小时前
C语言入门,字符串和字符串函数知识讲解
c语言·开发语言
xxxiugou1232 小时前
C++命名空间与引用全解析
开发语言·c++
风影同志783242 小时前
20 个比特能装下多少行情?——实测拆解 Kronos 的 K 线分词器
算法
十碗饭吃不饱2 小时前
后端运维:网络联通、进程查询、Java服务启动脚本
java·运维·网络