查找学生信息(二分查找)

题目描述:    

    输入N个学生的信息,然后进行查询

输入

    输入的第一行为N,即学生的个数(N<=1000)

    接下来N行表示N个学生的信息,格式如下:

    01 李江 男 21

    02 刘唐 男 23

    03 张军 男 19

    04 王娜 女 19

    然后输入一个M(M<=10000),接下来会有M行,代表M次查询,每行输入一个学号,格式如下:

    02

    03

    01

    04

输出:

    输出M行,每行包括一个对应于查询的学生的信息。如果没有对应的学生信息,则输出"No Answer!"

示例代码:

import java.io.BufferedInputStream;
import java.text.DecimalFormat;
import java.util.Arrays;
import java.util.Scanner;

public class Main {
    public static void binarySearch(int number,Student[] students){
        int i = 0;
        int j = students.length;
        int medium = (i+j)/2;
        //[Attention:注意区分全局变量和局部变量,while中medium的改变会影响students[medium].number的值]
        while (number!= students[medium].number){
            if (i>j){
                System.out.println("No answer");
                break;}
            if (number<students[medium].number){j=medium-1;}
            else {i=medium+1;}
            medium = (i+j)/2;
        }
        DecimalFormat decimalFormat = new DecimalFormat("00");
        System.out.println(decimalFormat.format(students[medium].number)+" "+students[medium].name+" "+students[medium].sex+" "+students[medium].age);


    }
    public static void main(String[] args){
        Scanner scanner = new Scanner(new BufferedInputStream(System.in));
        while (scanner.hasNext()){
            int n = scanner.nextInt();
            Student[] students = new Student[n];
            for (int i=0;i<n;i++){
                int std_num = scanner.nextInt();
                String std_name = scanner.next();
                String std_sex = scanner.next();
                int std_age = scanner.nextInt();
                students[i] = new Student(std_num,std_name,std_sex,std_age);
            }
            Arrays.sort(students,0,n,new cmp());
//            System.out.println("################");
//            for (int i=0;i<n;i++){
//                System.out.println(students[i].number+" "+students[i].name+" "+students[i].sex+" "+students[i].age);            }
//            System.out.println("################");
            int cnt = scanner.nextInt();
            for (int i=0;i<cnt;i++){
                int stdnum = scanner.nextInt();
                binarySearch(stdnum,students);
            }
        }
    }
}
public class Student {
    int number;
    String name;
    String sex;
    int age;
    //constructor
    public Student(int number,String name,String sex,int age){
        this.number = number;
        this.name = name;
        this.sex = sex;
        this.age = age;
    }
}
import java.util.Comparator;

public class cmp implements Comparator<Student> {
    @Override
    public int compare(Student o1, Student o2) {
        if(o1.number<o2.number){return -1;}
        else {return 1;}
    }
}



猜你喜欢

转载自blog.csdn.net/qq_35490520/article/details/81051928
今日推荐