首页 > 试题广场 >

EXCEL排序

[编程题]EXCEL排序
  • 热度指数:8094 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 64M,其他语言128M
  • 算法知识视频讲解
    Excel可以对一组纪录按任意指定列排序。现请你编写程序实现类似功能。     对每个测试用例,首先输出1行“Case i:”,其中 i 是测试用例的编号(从1开始)。随后在 N 行中输出按要求排序后的结果,即:当 C=1 时,按学号递增排序;当 C=2时,按姓名的非递减字典序排序;当 C=3 时,按成绩的非递减排序。当若干学生具有相同姓名或者相同成绩时,则按他们的学号递增排序。

输入描述:
    测试输入包含若干测试用例。每个测试用例的第1行包含两个整数 N (N<=100000) 和 C,其中 N 是纪录的条数,C 是指定排序的列号。以下有N行,每行包含一条学生纪录。每条学生纪录由学号(6位数字,同组测试中没有重复的学号)、姓名(不超过8位且不包含空格的字符串)、成绩(闭区间[0, 100]内的整数)组成,每个项目间用1个空格隔开。当读到 N=0 时,全部输入结束,相应的结果不要输出。


输出描述:
    对每个测试用例,首先输出1行“Case:”。随后在 N 行中输出按要求排序后的结果,即:当 C=1 时,按学号递增排序;当 C=2时,按姓名的非递减字典序排序;当 C=3 
时,按成绩的非递减排序。当若干学生具有相同姓名或者相同成绩时,则按他们的学号递增排序。
示例1

输入

3 1
000007 James 85
000010 Amy 90
000001 Zoe 60

输出

Case:
000001 Zoe 60
000007 James 85
000010 Amy 90
import java.util.ArrayList;
import java.util.Collections;
import java.util.Comparator;
import java.util.List;
import java.util.Scanner;

public class Main {
    	public static void main(String[] args) {
		Scanner scanner = new Scanner(System.in);
		while(scanner.hasNext()) {
			int n = scanner.nextInt();
			int i = scanner.nextInt();
			List<Student> myList = new ArrayList<Student>();
			for (int j = 0; j < n; j++) {
				Student student = new Student(scanner.next(),scanner.next(),scanner.nextInt());
				myList.add(student);
			}
			
			if (i == 1) {
				Collections.sort(myList,Comparator.comparing(Student::getNo));
				System.out.println("Case:");
				for (Student student : myList) {
					System.out.println(student.no+" "+student.name+" "+student.grade);
				}
			}else if (i == 2) {
				Collections.sort(myList,Comparator.comparing(Student::getName));
				System.out.println("Case:");
				for (Student student : myList) {
					System.out.println(student.no+" "+student.name+" "+student.grade);
				}
			}else {
				Collections.sort(myList,Comparator.comparing(Student::getGrade).thenComparing(Student::getNo));
				System.out.println("Case:");
				for (Student student : myList) {
					System.out.println(student.no+" "+student.name+" "+student.grade);
				}
			}
			
		}
	}
}

class Student{

	String no;
	String name;
	int grade;
	
	public Student(String no,String name,int grade) {
		this.no = no;
		this.name = name;
		this.grade = grade;
	}
	
	public void setNo(String no) {
		this.no = no;
	}
	public String getNo() {
		return no;
	}
	public void setGrade(int grade) {
		this.grade = grade;
	}
	public int getGrade() {
		return grade;
	}
	public void setName(String name) {
		this.name = name;
	}
	public String getName() {
		return name;
	}
	
}

编辑于 2024-03-31 20:36:00 回复(0)
import java.util.Scanner;

public class Main {

    public static void main(String[] args) {
        // TODO Auto-generated method stub
        Scanner sc=new Scanner(System.in);
        int n=sc.nextInt();
        int k=sc.nextInt();
        inform a[]=new inform[n];
        for(int i=0;i<n;i++) {
            inform ne=new inform();
            ne.num=sc.next();
            ne.name=sc.next();
            ne.score=sc.nextInt();
            a[i]=ne;
        }
        if(k==1) {
            num_sort(a);//对学号进行排序
            System.out.println("Case:");
            for(int i=0;i<a.length;i++) {//输出排序后的内容
                System.out.print(a[i].num+" "+a[i].name+" "+a[i].score);
                System.out.println();
            }
        }
        else if(k==2) {
            name_sort(a);//对名字进行排序
            System.out.println("Case:");
            for(int i=0;i<a.length;i++) {//输出排序后的内容
                System.out.print(a[i].num+" "+a[i].name+" "+a[i].score);
                System.out.println();
            }
        }
        else if(k==3) {
            score_sort(a);//对成绩进行排序
            System.out.println("Case:");
            for(int i=0;i<a.length;i++) {//输出排序后的内容
                System.out.print(a[i].num+" "+a[i].name+" "+a[i].score);
                System.out.println();
            }
        }
        

    }
    public static void num_sort(inform []a) {
        for(int i=0;i<a.length-1;i++) {
            for(int j=i+1;j<a.length;j++) {
                if(a[i].num.compareTo(a[j].num)>0) {
                    inform temp=a[i];
                    a[i]=a[j];
                    a[j]=temp;
                }
            }
        }
    }
    public static void name_sort(inform []a) {
        for(int i=0;i<a.length-1;i++) {
            for(int j=i+1;j<a.length;j++) {
                if(a[i].name.compareTo(a[j].name)>0) {
                    inform temp=a[i];
                    a[i]=a[j];
                    a[j]=temp;
                }
                else if(a[i].name.compareTo(a[j].name)==0) {
                    if(a[i].num.compareTo(a[j].num)>0) {
                        inform temp=a[i];
                        a[i]=a[j];
                        a[j]=temp;
                    }
                }
            }
        }
    }
    public static void score_sort(inform []a) {
        for(int i=0;i<a.length-1;i++) {
            for(int j=i+1;j<a.length;j++) {
                if(a[i].score>a[j].score) {
                    inform temp=a[i];
                    a[i]=a[j];
                    a[j]=temp;
                }
                else if(a[i].score==a[j].score) {
                    if(a[i].num.compareTo(a[j].num)>0) {
                        inform temp=a[i];
                        a[i]=a[j];
                        a[j]=temp;
                    }
                }
            }
        }
    }
    

}
class inform{
    String num;
    String name;
    int score;
}

发表于 2023-03-24 21:37:40 回复(0)
Java 面向对象写法
import java.util.Arrays;
import java.util.Scanner;

public class Main {

    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        while (scanner.hasNext()) {
            int n = scanner.nextInt();
            int caseNumber = scanner.nextInt();
            Student[] students = new Student[n];
            for (int i = 0; i < n; i++) {
                String ids = scanner.next();
                int id = Integer.parseInt(ids);
                students[i] = new Student(ids, id, scanner.next(), scanner.nextInt(), caseNumber);
            }
            Arrays.sort(students);
            System.out.println("Case:");
            for (Student student : students) System.out.println(student);
        }
    }

    static class Student implements Comparable<Student> {
        String ids;
        Integer id;
        String name;
        Integer score;
        Integer caseNumber;

        public Student(String ids, Integer id, String name, Integer score, Integer caseNumber) {
            this.ids = ids;
            this.id = id;
            this.name = name;
            this.score = score;
            this.caseNumber = caseNumber;
        }

        @Override
        public int compareTo(Student o) {
            if (caseNumber == 1) return this.id.compareTo(o.id);
            else if (caseNumber == 2)
                return this.name.equals(o.name) ? this.id.compareTo(o.id) : this.name.compareTo(o.name);
                //caseNumber==3
            else return this.score.equals(o.score) ? this.id.compareTo(o.id) : this.score.compareTo(o.score);

        }

        @Override
        public String toString() {
            return ids + " " + name + " " + score;
        }
    }
}


发表于 2020-03-20 16:59:47 回复(0)