栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

Java每日一练07判断完美数

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

Java每日一练07判断完美数

Java每日一练07
  • 判断完美数
  • 多线程打印0和奇偶数

判断完美数
import java.util.HashSet;

public class s05 {
    public static void main(String[] args) {
        boolean b = Solution.checkPerfectNumber(28);
        System.out.println(b); // true
    }
}


class Solution {
    
    public static boolean checkPerfectNumber(int num) { // 28
        
        if (num < 4) return false;
        int sum = 0;
        HashSet set = new HashSet<>();

        for (int i = 1; i <= num - 1; i++) {
            if ((num % i) == 0 && !set.contains(i) && !set.contains(num / i)) {
                set.add(i);
                set.add(num / i);
                sum += i;
                sum += num / i;
            }
        }
        sum -= num;
        return sum == num;
    }
}
多线程打印0和奇偶数
package ckwd.ps;

import java.util.concurrent.Semaphore;
import java.util.function.IntConsumer;

public class MultiThreadOddEvenZeroTest01 {
}

class ZeroOddEvenTest {
    public static void main(String[] args) {
        ZeroEvenOdd zeroEvenOdd = new ZeroEvenOdd(21);

        new Thread(() -> {
            try {
                zeroEvenOdd.zero(System.out::print);
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
        }).start();

        new Thread(() -> {
            try {
                zeroEvenOdd.even(System.out::print);
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
        }).start();

        new Thread(() -> {
            try {
                zeroEvenOdd.odd(System.out::print);
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
        }).start();
    }
}


class ZeroEvenOdd {
    private int n;
    private Semaphore zero = new Semaphore(1);
    private Semaphore even = new Semaphore(0);
    private Semaphore odd = new Semaphore(0);

    public ZeroEvenOdd(int n) {
        this.n = n;
    }

    public void zero(IntConsumer printNumber) throws InterruptedException {
        for (int i = 1; i <= n; i++) {
            zero.acquire(); // 取走1个许可证,代码往下执行
            printNumber.accept(0); // 输出0
            if (i % 2 == 1) {
                odd.release(); // 第1次会给odd信号量1个许可证
            } else {
                even.release();
            }
        }
    }

    public void even(IntConsumer printNumber) throws InterruptedException {
        for (int i = 2; i <= n; i += 2) {
            even.acquire();
            printNumber.accept(i);
            zero.release();
        }
    }

    public void odd(IntConsumer printNumber) throws InterruptedException {
        for (int i = 1; i <= n; i += 2) {
            odd.acquire(); // 第1次得到zero方法给的许可证后,代码继续往下执行
            printNumber.accept(i); // 输出1,i目前是1
            zero.release(); // 再给zero信号量1个许可证
        }
    }
}

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/685967.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号