最基本的算法练习

  1. 输出所有形如aabb的4位完全平方数
public class Exam2_1 {
    public static void main(String[] args) {
        System.out.println("形如aabb的4位完全平方数");
        for (int a = 1; a < 10; a++) {
            for (int b = 0; b < 10; b++) {
                // a重复前两位,b重复后两位
                int n = 1100 * a + 11 * b;
                // 对于开平方后的结果进行四舍五入
                int m = (int)Math.round(Math.sqrt(n));
                if (m * m == n) {
                    System.out.println(n);
                }
            }
        }
    }
}

  1. 3n + 1问题:对于任意大于1的自然数n,若n为奇数,则将n变为3n+1,否则变为原来数的一半,若干次变换后一定会使n变为1.求变换次数。(n <= 109
    说明:

// 给定 n <= 10^9;
// 需要用到的操作包含
n = n * 3 + 1;
// 考虑到Interger的最大值,2147483647 ,考虑3 * 10^9 = 3E9 > 2147483647,所以n要选用long

import java.util.Scanner;

public class Exam2_2 {
    public static void main(String[] args) {
        Scanner input = new Scanner(System.in);
        System.out.println("请输入n");
        long n = input.nextInt();

        long count = 0;

        while (n != 1) {
            if (n % 2 != 0) {
                n = 3 * n + 1;
            } else {
                n = (long)(n / 2);
            }
            count++;
        }
        System.out.println("count = " + count);
    }
}

  1. 计算π,计算公式是π/4 = 1-1/3+1/5-1/7……,直到最后一项小于10-6为止。
public class Exam2_3 {
    public static void main(String[] args) {
        int num = 1;
        float res = 0.0f;
       // 用来变换符号
        int tag = 1;
        float temp = 0.0f;

        do {
            temp = 1.0f / num;
            res += temp * tag;

            num += 2;
            tag *= -1;
        } while (temp >= 1e-6f);

        System.out.println("res = " + res);
    }
}
// 0.7853995
  1. 阶乘之和:输入n,计算S=1!+2!+3!+···n!的末6位(不含前导0).n<=106,n!表示前n个正整数之积
    样例输入:
    10
    样例输出:
    37913
    简单分析:
    我们可以使用一个数专门用来记录阶乘的值(temp),然后再用一个值累加阶乘即可,因为只需要末6位,所以可以对于结果直接取余1e6。
import java.util.Scanner;


public class Exam2_4 {
    public static void main(String[] args) {
        Scanner input = new Scanner(System.in);
        System.out.println("请输入n");
        int n = input.nextInt();

        long res = 0;
        long temp = 1;
        final int NUM = (int)1e6;

        for (int i = 1; i <= n; i++) {
            temp *= i;
            temp %= NUM;
            res += temp;
            res %= NUM;
        }

        System.out.println("res = " + res);
    }
}

发布了76 篇原创文章 · 获赞 53 · 访问量 4179

猜你喜欢

转载自blog.csdn.net/qq_42254247/article/details/102750815
今日推荐