Java面向对象编程(31)

简介: Java面向对象编程(31)

在单处理器系统中,如果同时存在有12个进程,则处于就绪队列中的进程数量最多为()

A. 1

B. 9

C. 10

D. 11

答案:D

以下关于多线程的叙述中错误的是()

A. 线程同步的方法包括使用临界区,互斥量,信号量等

B. 两个线程同时对简单类型全局变量进行写操作也需要互斥

C. 实现可重入函数时,对自动变量也要用互斥量加以保护

D. 可重入函数不可以调用不可重入函数

答案:C

系统死锁的可能的原因是()

A. 进程死循环

B. 资源循环等待

C. 程序内存访问越界

D. 进程释放资源

答案:B

整数0x12345678,在采用bigendian中内存的排序序列是( )

A. 12 34 56 78

B. 78 56 34 12

C. 87 65 43 21

D. 21 43 65 87

答案:A

使用C语言将一个1G字节的字符数组从头到尾全部设置为字’A’,在一台典型的当代PC上,需要花费的CPU时间的数量级最接近()

A. 0.001秒

B. 1秒

C. 100秒

D. 2小时

答案:B

对于普通的计算机,对以下事件的平均耗时从小到大排序为____:

A.读取1KB内存数据

B.从硬盘连续读取1KB数据

C.读取一次L2缓存

D.一次磁盘寻道

A. C,A,D,B

B. C,D,A,B

C. D,C,A,B

D. D,A,C,B

答案:A

分页式虚拟存储管理系统中,页面的大小与可能产生的缺页中断次数( )

A. 成正比

B. 成反比

C. 无关

D. 成固定值

答案:C

关于子进程和父进程的说法,下面哪一个是正确的()

A. 一个父进程可以创建若干个子进程,一个子进程可以从属于若干个父进程

B. 父进程被撤销时,其所有子进程也被相应撤消

C. 子进程被撤销时,其从属的父进程也被撤销

D. 一个进程可以没有父进程或子进程

答案:D

关于线程和进程,下面说法正确的是()

A. 终止一个进程比终止一个线程花费的时间少

B. 进程切换比同一进程内部的线程切换花费的时间少

C. 线程提高了不同执行程序间的通信效率

D. 进程和线程都是资源分配和调度的基本单位

答案:C

进程调度时,下列进程状态的变化过程哪一项是不可能发生的()

A. 阻塞挂起->阻塞

B. 就绪挂起->就绪

C. 就绪挂起->阻塞挂起

D. 阻塞挂起->就绪挂起

答案:C

分解因数

题目描述:所谓因子分解,就是把给定的正整数a,分解成若干个素数的乘积,即 a = a1 × a2 × a3 × ... × an,并且 1 < a1 ≤ a2 ≤ a3 ≤ ... ≤ an。其中a1、a2、...、an均 为素数。 先给出一个整数a,请输出分解后的因子。

输入描述:输入包含多组数据,每组数据包含一个正整数a(2≤a≤1000000)。

输出描述:对应每组数据,以“a = a1 * a2 * a3...”的形式输出因式分解后的结果。


public class Main49 {
    //分解因数
    public static void main(String[] args) {
        Scanner scanner=new Scanner(System.in);
        while (scanner.hasNextInt()){
            int a=scanner.nextInt();
            List<String> factors=factorization(a);
            System.out.printf("%d = %s\n",a,String.join(" * ",factors));
        }
    }
    private static List<String > factorization(int a){
        List<String > ans=new ArrayList<>();
        for (int i = 2; a>1 && i*i <= a; i++) {
            while (a %i ==0){
                ans.add(String.valueOf(i));
                a=a/i;
            }
        }
        if (a>1){
            ans.add(String.valueOf(a));
        }
        return ans;
    }
}

美国节日

题目描述:和中国的节日不同,美国的节假日通常是选择某个月的第几个星期几这种形式,因此每一年的放假日期都不相同。具体规则如下:

* 1月1日:元旦

* 1月的第三个星期一:马丁·路德·金纪念日

* 2月的第三个星期一:总统节

* 5月的最后一个星期一:阵亡将士纪念日

* 7月4日:美国国庆

* 9月的第一个星期一:劳动节

* 11月的第四个星期四:感恩节

* 12月25日:圣诞节 现在给出一个年份,请你帮忙生成当年节日的日期。 输入描述:输入包含多组数据,每组数据包含一个正整数year(2000≤year≤9999)。

输出描述:对应每一组数据,以“YYYY-MM-DD”格式输出当年所有的节日日期,每个日期占一行。

每组数据之后输出一个空行作为分隔。


public class Main50 {
    //判断是否为闰年
    private static boolean isLeepYear(int y){
        return (y % 400==0) || (y%4==0 && y %100 !=0);
    }
    //传入 y,m,d,找到从公元1年12月31日开始过了多久,求出它的MOD 7的同余数
    private static int diff(int y,int m ,int d){
        return (y-1)+(y-1)/4-(y-1)/100+(y-1)/400+nDays(y,m,d);
    }
//根据1 日星期w,求第n 个星期e是几号
    private static int m1(int w,int n ,int e){
        return 1+(n-1)*7+(7-w+e)%7;
    }
    //根据6月1日星期w,求5月的最后一个星期一
    private static int m2(int w){
        int d=(w==1 ? 7:w-1);
        return 32-d;
    }
    //根据y,m,d求出星期几
    private  static int week(int y,int m ,int d){
        int w=diff(y,m,d)%7;
        if (w==0){
            w=7;
        }
        return w;
    }
    private static final int[] DAYS={31,28,31,30,31,30,31,31,30,31,30,31};
    //给定y,m,d 返回这年过了多少天
    private static int nDays(int y,int m,int d){
        //m : 12
        //[0 ,10]
        int n=d;
        for (int i = 0; i < m-1; i++) {
            n +=DAYS[i];
        }
        if (m >2 && isLeepYear(y)){
            n++;
        }
        return n;
    }
    public static void main(String[] args) {
        Scanner scanner=new Scanner(System.in);
        while (scanner.hasNextInt()){
            int y= scanner.nextInt();
            System.out.printf("%d-01-01\n",y);
            int w;
            w=week(y,1,1);
            System.out.printf("%d-01-%02d\n",y,m1(w,3,1));
            w=week(y,2,1);
            System.out.printf("%d-02-%02d\n",y,m1(w,3,1));
            w=week(y,6,1);
            System.out.printf("%d-05-%02d\n",y,m2(w));
            System.out.printf("%d-07-04\n",y);
            w=week(y,9,1);
            System.out.printf("%d-09-%02d\n",y,m1(w,1,1));
            w=week(y,11,1);
            System.out.printf("%d-11-%02d\n",y,m1(w,4,4));
            System.out.printf("%d-12-25",y);
            System.out.println();
        }
    }
}
相关文章
|
3月前
|
Java 开发者
在Java面向对象编程的广阔海洋中,多态犹如一股深邃的潜流,它推动着代码从单一走向多元,从僵化迈向灵活。
在Java面向对象编程的广阔海洋中,多态犹如一股深邃的潜流,它推动着代码从单一走向多元,从僵化迈向灵活。
41 7
|
3月前
|
Java 开发者
那些年,我们一同踏入Java编程的大门,多态,这个充满魔法的名字,曾无数次点亮我们探索面向对象编程的热情。
那些年,我们一同踏入Java编程的大门,多态,这个充满魔法的名字,曾无数次点亮我们探索面向对象编程的热情。
48 5
|
3月前
|
Java 程序员
Java中的继承和多态:理解面向对象编程的核心概念
【8月更文挑战第22天】在Java的世界中,继承和多态不仅仅是编程技巧,它们是构建可维护、可扩展软件架构的基石。通过本文,我们将深入探讨这两个概念,并揭示它们如何共同作用于面向对象编程(OOP)的实践之中。你将了解继承如何简化代码重用,以及多态如何为程序提供灵活性和扩展性。让我们启程,探索Java语言中这些强大特性的秘密。
|
5月前
|
Java
Java面向对象编程新篇章:多态,你准备好了吗?
【6月更文挑战第17天】Java的多态性是面向对象编程的核心,它允许通过统一的接口处理不同类型的对象。例如,在一个虚拟宠物游戏中,抽象类`Pet`定义了`speak()`方法,猫、狗和鹦鹉等子类各自重写此方法以实现独特叫声。在`main`方法中,使用`Pet`类型的引用创建子类对象并调用`speak()`,多态机制确保调用实际对象的方法,实现代码的灵活性和可扩展性。通过多态,我们能以更低的耦合度和更高的复用性编写更优雅的代码。
36 3
|
5月前
|
Java
Java 面向对象编程:父类与子类的“传承”与“创新”之路
【6月更文挑战第16天】Java 中的父类与子类展示了面向对象的“传承”与“创新”。子类`Dog`继承`Animal`,获取其属性和方法如`name`和`makeSound`。子类通过`@Override`增强`makeSound`,显示多态性。设计父类时应考虑普遍性,子类创新专注自身特性,遵循继承最佳实践,利用复用提升效率,构建可维护的软件系统。
151 57
|
3月前
|
存储 前端开发 JavaScript
【前端学java】面向对象编程基础-类的使用(4)
【8月更文挑战第9天】面向对象编程基础-类的使用
19 0
【前端学java】面向对象编程基础-类的使用(4)
|
3月前
|
Java 程序员 开发者
Java的面向对象编程:从基础到深入
【8月更文挑战第21天】在本文中,我们将探讨Java的面向对象编程(OOP)的核心概念,包括类、对象、继承、多态和封装。我们将通过实例和比喻,以通俗易懂的方式,深入理解这些概念的内涵和意义,以及它们如何影响我们的编程思维和实践。无论你是初学者还是有经验的开发者,这篇文章都将帮助你更深入地理解Java的OOP,并启发你思考如何在你的项目中应用这些概念。
|
4月前
|
Java API 项目管理
Java中的函数式编程与传统面向对象编程对比
Java中的函数式编程与传统面向对象编程对比
|
5月前
|
Java 安全 索引
滚雪球学Java(48):面向对象编程中的StringBuffer类详解
【6月更文挑战第2天】🏆本文收录于「滚雪球学Java」专栏,专业攻坚指数级提升,希望能够助你一臂之力,帮你早日登顶实现财富自由🚀;同时,欢迎大家关注&&收藏&&订阅!持续更新中,up!up!up!!
60 5
滚雪球学Java(48):面向对象编程中的StringBuffer类详解
|
5月前
|
存储 安全 Java
深入探讨 Java 封装机制:为何它是面向对象编程的核心?
【6月更文挑战第16天】Java的封装是OOP核心,它将数据和操作数据的方法打包在类中,隐藏实现细节并提供公共接口。例如,`Student`类封装了私有属性`name`和`age`,通过`get/set`方法安全访问。封装提升代码稳定性、可维护性和复用性,防止外部直接修改导致的错误,确保数据安全。它是面向对象编程优于传统编程的关键,促进高效、可靠的开发。
59 7