最基本的算法练习

  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);
    }
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值