每日训练-day31

day31_0530

选择题

a323d29847114e92b0ccb8f09f71304c.png

 可重入函数可认为是可以被中断的函数,自动变量定义的时候才被创建,函数返回时,系统回收空间,他是的是局部作用域变量,不需要互斥量。可重入函数对全局变量才需要互斥量保护。

b9eaad4e5ece4d91b5a882fe231b0e7e.png

 执行1条语句约1ns即10的-9次方秒,1G=1024M=1024*1024k=1024*1024*1024byte,每次赋值1byte都要执行一次语句,故至少花费1024*1024*1024*10^-9=1.073741824s

0262b66da2554adc85cd5b58a5ae65cc.png

 线程的切换要比进程切换花费的时间少,

线程是系统调度的基本单位,进程是资源分配的基本单位

 而 线程提高了不同的执行程序间通信的效率。在大多数操作系统中,独立进程间的通信需要内核的介入,以提供和保护通信所需要的机制。但是,由于在同一个进程中的线程共享内存和文件,它们无须调用内核就可以互相通信。--《操作系统精髓与设计原理》

7b1ab961c72b46528ea608ebbdc51341.png

CSDN编程社区

9e8243c6e8f449a8bf2f12d21779e1ce.png

 死锁的四个必要条件:
(1) 互斥条件:一个资源每次只能被一个进程使用。
(2) 请求与保持条件:一个进程因请求资源而阻塞时,对已获得的资源保持不放。
(3) 不剥夺条件:进程已获得的资源,在末使用完之前,不能强行剥夺。
(4) 循环等待条件:若干进程之间形成一种头尾相接的循环等待资源关系。

70d3a0c21ee645c8adffa9665828d9e2.png

BigEndian指数据的低位保存在内存的高地址中,而数据的高位保存在内存的低地址中
LittleEndian是指数据的低位保存在内存的低地址中,而数据的高位保存在内存的高地址中
4612ee7f415e463bab24dd51f0fb2686.png

 就是爸爸和儿子的关系;

ad5643fe5e0e4a9e9ba13e408936fd56.png

最多有n-1个进程在等待

dedc429a2bba4ac4887729b6eb8c471b.png

 页面越大,其包含的指令和数据越多,页面数量就越少,每次新页面加载后到下次发生缺页的时间就更长,也就是缺页中断的次数越少。

 172991ee9c81492d94b556832e877b4f.png

 30f3c7884bd74a2890d9a729b0cbcf3b.jpeg

编程题

美国节日

8a664e7318304f499a942240cfd53cd1.png

主要是要找到这年一月一号是星期几,因为它影响每月一号星期几,然后可以根据日历发现他们之间的规律;最后进一步算到第W个星期Q的日期。

public class AmericanFestival {
    public static void main(String[] args) {
        Scanner sc=new Scanner(System.in);
        while(sc.hasNext()) {
            int year = sc.nextInt();
            System.out.println(year + "-01-01");
            int X = 0;
            X = Monday(year, 1, 1);//1月1号的星期几
            System.out.printf("%d-01-%02d\n", year, d1(X, 3, 1));//1月的第三个星期一
            X = (X+3)%7==0?7:(X+3)%7;//2月1号的星期几
            System.out.printf("%d-02-%02d\n", year, d1(X, 3, 1));//2月的第三个星期一
            X = Monday(year, 6, 1);
            System.out.printf("%d-05-%02d\n", year, d2(X));//5月的最后一个星期一
            System.out.printf("%d-07-04\n", year);
            X = (X+1)%7==0?7:(X+1)%7;
            System.out.printf("%d-09-%02d\n", year, d1(X, 1, 1));//9月的第一个星期一
            X = (X+5)%7==0?7:(X+5)%7;
            System.out.printf("%d-11-%02d\n", year, d1(X, 4, 4));//11月的第四个星期四
            System.out.printf("%d-12-25\n", year);
            System.out.println();
         }
    }
    //这年已经过了多少天
    private static final int[] mouth={31,28,31,30,31,30,31,31,30,31,30,31};
    public static int YDay(int y,int m,int d){
        int count =0;
        for (int i = 0; i <m-1 ; i++) {
            count+=mouth[i];
            if(i==2&&leap(y)){
                count++;
            }
        }
        return count+d ;
    }
    //计算从0000-12-31到Y-M-D一共隔的天数
    public static int countDay(int y,int m,int d){
                //以356为基础算的天数+闰年的个数+Y年已过的天数
                //但是总天数最后要%7,而365=364+1=52*7+1,所以只需要算上那个1就好了,也就是过了多少年
                // 所以(y-1)*365可以省略为(y-1)
                //能被4除的也能被100整除,但不是闰年,比如1500,所以减去(y-1)/100只算(y-1)/400的数
        return (y-1)+(y-1)/4-(y-1)/100+(y-1)/400+YDay(y,m,d);
    }
    //第W个星期Q的日期
    public static int d1(int X,int W,int Q){
        return 1+(W-1)*7+(7-X+Q)%7;
    }
    //5月的最后一个星期一的日期
    public static int d2(int X){
        int d=(X==1?7:X-1);
        return 32-d;
    }
    //某年某月的一号是星期几
    public static int Monday(int y,int m,int d){
        int X=countDay(y,m,d)%7;
        if(X==0){
            X=7;
        }
        return X;
    }
    //判断是否是闰年
    public static boolean leap(int y){
        if(y%100==0){
            if(y%400==0){
                return true;
            }
            return false;
        }
            if(y%4==0){
                return true;
            }
            return false;
    }
}

分解因数

61352e9332e64ac7a056cb3506d49b1b.png

import java.util.Scanner;
public class Main{
    static int[] arr=new int[100];
    static int a=0;
    public static void main(String[] args){
        Scanner sc=new Scanner(System.in);
        while(sc.hasNext()) {
            int num = sc.nextInt();
            int n = num;
            System.out.println(num + " = " + yinzi(n));
        }
    }
    public static String yinzi (int num){
        String str="";
        for(int i=2;i<=Math.sqrt(num);i++){
                while(num%i==0){
                    str+=i;
                    if(i!=num/i){
                        str+="*";
                    }else {
                        str+="*"+num/i;
                        num/=i;
                    }
                    num/=i;
                }
        }
        if(num>1){
            str+=num;
        }
        return str;
    }
}

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值