笔试强训之【两种排序方法和最小公倍数】

目录

  • 1.两种排序方法
    • 1.1题目
    • 1.2解题思路
    • 1.3代码
  • 2.最小公倍数
    • 2.1题目
    • 2.2解题思路
    • 2.3代码
  • 3.选择题

1.两种排序方法

1.1题目

链接: link
描述
考拉有n个字符串字符串,任意两个字符串长度都是不同的。考拉最近学习到有两种字符串的排序方法: 1.根据字符串的字典序排序。例如:
“car” < “carriage” < “cats” < "doggies < “koala”
2.根据字符串的长度排序。例如:
“car” < “cats” < “koala” < “doggies” < “carriage”
考拉想知道自己的这些字符串排列顺序是否满足这两种排序方法,考拉要忙着吃树叶,所以需要你来帮忙验证。

输入描述:
输入第一行为字符串个数n(n ≤ 100) 接下来的n行,每行一个字符串,字符串长度均小于100,均由小写字母组成

输出描述:
如果这些字符串是根据字典序排列而不是根据长度排列输出"lexicographically",
如果根据长度排列而不是字典序排列输出"lengths",
如果两种方式都符合输出"both",否则输出"none"
示例1
输入:
3
a
aa
bbb
输出:
both

1.2解题思路

本题就是判断一个字符串数组,从0-n,是否满足按照字典排序和长度排序。

字典排序:就是根据字符串的每个字母的大小判断,比如数组{“aa”,“bb”},因为b的比a大(ASCII的大小判断),多以符合字典排序。
长度排序:就是根据每一个字符串的大小来判断,如果后一个比前一个的长度长就符合,比如{“aaa”,“aaaaa”},后一个字符串长度为5,前一个为3,所以也符合长度排序。

最后就只需要判断符合那个条件就可以了。

1.3代码

import java.util.Scanner;

// 注意类名必须为 Main, 不要有任何 package xxx 信息
public class Main {

    public static boolean zidian(String[] str)
    {
        for(int i=0;i<str.length-1;i++)
        {
            if(str[i].compareTo(str[i+1])>0)
            {
                return false;
            }
        }
        return true;
    }
     public static boolean fun(String[] str)
    {
        for(int i=0;i<str.length-1;i++)
        {
            if(str[i].length()>str[i+1].length())
            {
                return false;
            }
        }
        return true;
    }
    public static void main(String[] args) {
        Scanner in = new Scanner(System.in);
        int n = in.nextInt();
        String[] str = new String[n];
        for (int i = 0; i < n; i++) {
            str[i] = in.next();
        }
        boolean zd = zidian(str);
        boolean len = fun(str);
        if (zd && len) {
            System.out.print("both");
        } else if (zd) {
            System.out.print("lexicographically");
        } else if (len) {
            System.out.print("lengths");
        } else {
            System.out.print("none");
        }
    }
}

2.最小公倍数

2.1题目

链接: link
描述
正整数A和正整数B 的最小公倍数是指 能被A和B整除的最小的正整数值,设计一个算法,求输入A和B的最小公倍数。

数据范围:1 \le a,b \le 100000 \1≤a,b≤100000
输入描述:
输入两个正整数A和B。

输出描述:
输出A和B的最小公倍数。

示例1
输入:
5 7

输出:
35

2.2解题思路

这道题很简单,既然要求最小的公倍数,那么就需要先求出两个值的最小值,然后从最小值开始依次遍历,知道两个数的乘积,这个时候就一定是两个数的公倍数了。

2.3代码

import java.util.Scanner;

public class Main {
    public static void main(String[] args) {
        Scanner in = new Scanner(System.in);
        int a=in.nextInt();
        int b=in.nextInt();
        int ret=a>b?b:a;
        for(int i=ret;i<=a*b;i++)
        {
            if(i%a==0&&i%b==0)
            {
                System.out.println(i);
                return;
            }
        }
    }
}

3.选择题

  1. 以下选项中,对Java关于内存回收的说法正确的是(B
    A 程序员必须创建一个线程来释放内存
    B 内存回收程序负责释放无用内存
    C 内存回收程序允许程序员直接释放内存
    D 内存回收程序可以在指定的时间释放内存对象

2.A派生出子类B,B派生出子类C,并且在java源代码中有如下声明:(A
A a0=new A();
A a1=new B();
A a2=new C();
以下哪个说法是正确的?
A 第1行,第2行和第3行的声明都是正确的
B 第1,2,3行都能通过编译,但第2,3行运行时出错
C 第1,2行能通过编译,但第3行编译出错
D 只有第1行能通过编译

因为继承有传递性,向上传递

3.以下说法错误的是(C
A 数组是一个对象
B 数组不是一种原生类
C 数组的大小可以任意改变
D 在Java中,数组存储在堆中连续内存空间里

数组的大小一旦确定,不能被改变,不能自动扩容

4.Test.main() 函数执行后的输出是(D
public class Test {
public static void main(String [] args){
System.out.println(new B().getValue());
}
static class A{
protected int value;
public A(int v) {
setValue(v);
}
public void setValue(int value){
this.value = value;
}
public int getValue(){
try{
value++;
return value;
} catch(Exception e){
System.out.println(e.toString());
} finally {
this.setValue(value);
System.out.println(value);
}
return value;
}
}
static class B extends A{
public B() {
super(5);
setValue(getValue() - 3);
}
public void setValue(int value){
super.setValue(2 * value);
}
}
}
A 11 17 34
B 22 74 74
C 6 7 7
D 22 34 17

  1. 关于Java的异常处理机制的叙述哪些正确?(C
  2. A 如果程序发生错误及捕捉到异常情况了,才会执行finally部分
    B 其他选项都不正确
    C 当try区段的程序发生异常且被catch捕捉到时,才会执行catch区段的程序
    D catch部分捕捉到异常情况时,才会执行finally部分

finally一定会触发

  1. 如何跳出Array的forEach循环?(A
    A break
    B return true
    C return false
    D 以上都不是

break可以跳出循环,return也可以,但是这道题加上了true/false,由于不知道方法的返回值类型,所以错误

7.一个以”.java”为后缀的源文件(C
A 只能包含一个类,类名必须与文件名相同
B 只能包含与文件名相同的类以及其中的内部类
C 只能有一个与文件名相同的类,可以包含其他类
D 可以包含任意类

可以包含很多的类,但是只有一个public类

8.如下Java语句
double x= 3.0;
int y=5;
x/=–y;
执行后, x的值是(D
A 3
B 0.6
C 0.4
D 0.75

x=x/–y
是先把y–,再除,并且由于x是double类型的,所以结果也是double类型的

9.下列代码运行后输出结果为(A
public class Test1 {
static int cnt = 6;
static {
cnt += 9;
}
public static void main(String[] args) {
System.out.println(“cnt =” + cnt);
}
static {
cnt /= 3;
}
}
A cnt=5
B cnt=2
C cnt=3
D cnt=6

这道题考查的是静态方法,这种情况下我们一定要执行全部的静态方法

  1. JUnit主要用来完成什么(D
    A 发送HTTP请求
    B 建立TCP连接
    C 集成测试
    D 单元测试

你可能感兴趣的:(算法,java,java,算法,排序算法)