目录
7-2 sdut-Collection-sort--C~K的班级(II)
7-3 sdut-Map-Sort--C~K的班级(III)
7-4 sdut-LinkedHashMap--C~K的班级(IV)
7-8 sdut-Collection(Map) 读中国载人航天史,汇航天员数量,向航天员致敬(2)
7-9 sdut-Collection(List) 读中国载人航天史,汇航天员数量,向航天员致敬(3)
7-10 sdut-String+array(LinkedHashMap) 读中国载人航天史,汇航天员数量,向航天员致敬(1)
目录
7-2 sdut-Collection-sort--C~K的班级(II)
7-3 sdut-Map-Sort--C~K的班级(III)
7-4 sdut-LinkedHashMap--C~K的班级(IV)
7-8 sdut-Collection(Map) 读中国载人航天史,汇航天员数量,向航天员致敬(2)
7-10 sdut-String+array(LinkedHashMap) 读中国载人航天史,汇航天员数量,向航天员致敬(1)
6-1 学生对象排序1
分数 10
全屏浏览题目
作者 周雪芹
单位 山东理工大学
设计学生类Student,内含如下属性:学号(int id)、姓名(String name)、数学成绩(int math)、英语成绩(int english)、计算机成绩(int cs)。
创建若干个学生类的对象,将其加入List集合中。将学生对象按照如下规则输出:
(1)数学成绩从小到大;(2)若数学成绩相同,按照英语成绩从大到小;(3)若数学、英语成绩都相同,按照计算机成绩从小到到大;(4)若三门课程成绩都相同,按照学号从小到大顺序。
函数接口定义:
//请按如下提示完善Student类的设计
//内含如下属性:学号(int id)、姓名(String name)、数学成绩(int math)、英语成绩(int english)、计算机成绩(int cs)。
class Student implements Comparable<Student> {
int id;
String name;
int math;
int english;
int cs;
//补充代码段1
@Override
public String toString() {
return "Student{" +
"id=" + id +
", name='" + name + '\'' +
", math=" + math +
", english=" + english +
", cs=" + cs +
'}';
}
//补充代码段2
}
裁判测试程序样例:
import java.util.*;
public class Main {
public static void main(String[] args) {
List<Student> list=new ArrayList<Student>();
list.add(new Student(10,"wangli",89,78,88));
list.add(new Student(28,"Katefd",89,68,88));
list.add(new Student(35,"Caoyue",69,78,86));
list.add(new Student(36,"zhansa",69,78,83));
list.add(new Student(47,"wanhua",98,88,88));
list.add(new Student(52,"wanhai",69,88,89));
list.add(new Student(63,"liwuab",89,78,88));
Collections.sort(list);
for(Student stu:list)
{
System.out.println(stu);
}
}
}
/* 请在这里填写完整的Student类的设计代码 */
输入样例:
无
输出样例:
Student{id=52, name='wanhai', math=69, english=88, cs=89}
Student{id=36, name='zhansa', math=69, english=78, cs=83}
Student{id=35, name='Caoyue', math=69, english=78, cs=86}
Student{id=10, name='wangli', math=89, english=78, cs=88}
Student{id=63, name='liwuab', math=89, english=78, cs=88}
Student{id=28, name='Katefd', math=89, english=68, cs=88}
Student{id=47, name='wanhua', math=98, english=88, cs=88}
代码实现
//请按如下提示完善Student类的设计
//内含如下属性:学号(int id)、姓名(String name)、数学成绩(int math)、英语成绩(int english)、计算机成绩(int cs)。
class Student implements Comparable<Student> {
int id;
String name;
int math;
int english;
int cs;
//补充代码段1
public Student(int id,String name,int math,int english,int cs)
{
this.id=id;
this.name=name;
this.math=math;
this.english=english;
this.cs=cs;
}
@Override
public String toString() {
return "Student{" +
"id=" + id +
", name='" + name + '\'' +
", math=" + math +
", english=" + english +
", cs=" + cs +
'}';
}
//补充代码段2
@Override
public int compareTo(Student o)
{
if(this.math!=o.math)
return this.math-o.math;
else if(this.english!=o.english)
return o.english-this.english;
else if(this.cs!=o.cs)
return this.cs-o.cs;
else
return this.id-o.id;
}
}
6-2 学生对象排序2
分数 10
全屏浏览题目
作者 周雪芹
单位 山东理工大学
设计学生类Student,内含如下属性:学号(int id)、姓名(String name)、数学成绩(int math)、英语成绩(int english)、计算机成绩(int cs)。
创建若干个学生类的对象,将其加入List集合中。将学生对象按照如下规则输出:
(1)数学成绩从小到大;(2)若数学成绩相同,按照英语成绩从大到小;(3)若数学、英语成绩都相同,按照计算机成绩从小到到大;(4)若三门课程成绩都相同,按照姓名字典序从A-Z,a-z逆序排列;(5)若前面的属性均相同,按照学号从小到大顺序。
函数接口定义:
//请按如下提示完善Student类的设计
//内含如下属性:学号(int id)、姓名(String name)、数学成绩(int math)、英语成绩(int english)、计算机成绩(int cs)。
class Student implements Comparable<Student> {
int id;
String name;
int math;
int english;
int cs;
//补充代码段1
@Override
public String toString() {
return "Student{" +
"id=" + id +
", name='" + name + '\'' +
", math=" + math +
", english=" + english +
", cs=" + cs +
'}';
}
//补充代码段2
}
裁判测试程序样例:
import java.util.*;
public class Main {
public static void main(String[] args) {
List<Student> list=new ArrayList<Student>();
list.add(new Student(10,"wangli",89,78,88));
list.add(new Student(28,"Katefd",89,68,88));
list.add(new Student(35,"Caoyue",69,78,86));
list.add(new Student(36,"caoyue",69,78,86));
list.add(new Student(32,"Caoyue",69,78,81));
list.add(new Student(36,"zhansa",69,78,86));
list.add(new Student(88,"zhansa",69,78,86));
list.add(new Student(47,"wanhua",98,88,88));
list.add(new Student(52,"wanhai",69,88,89));
list.add(new Student(63,"liwuab",89,78,88));
Collections.sort(list);
for(Student stu:list)
{
System.out.println(stu);
}
}
}
/* 请在这里填写答案 */
输入样例:
无
输出样例:
Student{id=52, name='wanhai', math=69, english=88, cs=89}
Student{id=32, name='Caoyue', math=69, english=78, cs=81}
Student{id=36, name='zhansa', math=69, english=78, cs=86}
Student{id=88, name='zhansa', math=69, english=78, cs=86}
Student{id=36, name='caoyue', math=69, english=78, cs=86}
Student{id=35, name='Caoyue', math=69, english=78, cs=86}
Student{id=10, name='wangli', math=89, english=78, cs=88}
Student{id=63, name='liwuab', math=89, english=78, cs=88}
Student{id=28, name='Katefd', math=89, english=68, cs=88}
Student{id=47, name='wanhua', math=98, english=88, cs=88}
代码实现
//请按如下提示完善Student类的设计
//内含如下属性:学号(int id)、姓名(String name)、数学成绩(int math)、英语成绩(int english)、计算机成绩(int cs)。
class Student implements Comparable<Student> {
int id;
String name;
int math;
int english;
int cs;
//补充代码段1
public Student (int id,String name,int math,int english,int cs)
{
this.id=id;
this.name=name;
this.math=math;
this.english=english;
this.cs=cs;
}
@Override
public String toString() {
return "Student{" +
"id=" + id +
", name='" + name + '\'' +
", math=" + math +
", english=" + english +
", cs=" + cs +
'}';
}
//补充代码段2
public int compareTo(Student o)
{
if(this.math!=o.math)
return this.math-o.math;
else if(this.english!=o.english)
return o.english-this.english;
else if(this.cs!=o.cs)
return this.cs-o.cs;
else if(!this.name.equals(o.name))
return o.name.compareTo(this.name);
else
return this.id-o.id;
}
}
7-1 sdut-Collection-C~K的班级(I)
分数 10
全屏浏览题目
作者 周雪芹
单位 山东理工大学
经过不懈的努力,C~K终于当上了班主任。
现在他要统计班里学生的名单,但是C~K在教务系统中导出班级名单时出了问题,发现会有同学的信息重复,现在他想把重复的同学信息删掉,只保留一个,
但是工作量太大了,所以找到了会编程的你,你能帮他解决这个问题吗?
输入格式:
第一行输入一个N,代表C~K导出的名单共有N行(N<100000).
接下来的N行,每一行包括一个同学的信息,学号 姓名 年龄 性别。
输出格式:
第一行输出一个n,代表删除重复名字后C~K的班级共有几人。
接下来的n行,输出每一个同学的信息,输出按照输入的顺序。
输入样例:
6
0001 MeiK 20 M
0001 MeiK 20 M
0002 sdk2 21 M
0002 sdk2 21 M
0002 sdk2 21 M
0000 blf2 22 F
输出样例:
3
0001 MeiK 20 M
0002 sdk2 21 M
0000 blf2 22 F
代码实现
import java.util.ArrayList;
import java.util.Scanner;
public class Main{
public static void main(String[] args)
{
Scanner in =new Scanner(System.in);
ArrayList<String> list=new ArrayList<String>();
int n=in.nextInt();
String s=in.nextLine();
while(n--!=0)
{
s=in.nextLine();
if(list.contains(s))
continue;//如果这个学生在集合中 跳过本次循环
list.add(s);//否则存入集合
}
System.out.println(list.size());
for(int i=0;i<list.size();i++)
System.out.println(list.get(i));
}
}
7-2 sdut-Collection-sort--C~K的班级(II)
分数 10
全屏浏览题目
作者 周雪芹
单位 山东理工大学
经过不懈的努力,C~K终于当上了班主任。
现在他要统计班里学生的名单,但是C~K在教务系统中导出班级名单时出了问题,发现会有同学的信息重复,现在他想把重复的同学信息删掉,只保留一个,
但是工作量太大了,所以找到了会编程的你,你能帮他解决这个问题吗?
输入格式:
第一行输入一个N,代表C~K导出的名单共有N行(N<100000).
接下来的N行,每一行包括一个同学的信息,学号 姓名 年龄 性别。
输出格式:
第一行输出一个n,代表删除重复名字后C~K的班级共有几人。
接下来的n行,输出每一个同学的信息,输出按照学号从小到大的顺序。
输入样例:
6
0001 MeiK 20 M
0001 MeiK 20 M
0002 sdk2 21 M
0002 sdk2 21 M
0002 sdk2 21 M
0000 blf2 22 F
输出样例:
3
0000 blf2 22 F
0001 MeiK 20 M
0002 sdk2 21 M
代码实现
import java.util.ArrayList;
import java.util.Scanner;
import java.util.Collections;
public class bc_2
{
public static void main(String[] args)
{
Scanner in=new Scanner(System.in);
ArrayList<String> list=new ArrayList<String>();
int n=in.nextInt();
String s=in.nextLine();
while (n--!=0)
{
s=in.nextLine();
if(list.contains(s))
continue;
list.add(s);
}
Collections.sort(list);//排序
System.out.println(list.size());
for(int i=0;i<list.size();i++)
System.out.println(list.get(i));
}
}
7-3 sdut-Map-Sort--C~K的班级(III)
分数 10
全屏浏览题目
作者 周雪芹
单位 山东理工大学
经过不懈的努力,C~K终于当上了班主任。
现在他要统计班里学生的名单,但是C~K在教务系统中导出班级名单时出了问题,发现有学号相同的学生。学号相同,代表同一个学生。(如果学号相同,后来读入的学生信息会覆盖已有的学生信息)
但是工作量太大了,所以找到了会编程的你,你能帮他解决这个问题吗?
输入格式:
第一行输入一个N,代表C~K导出的名单共有N行。
接下来的N行,每一行包括一个学生的信息,数据之间用1个空格分隔,如:学号 姓名 年龄 性别。
输出格式:
第一行输出一个n,代表数据处理之后C~K的班级共有几人。
接下来的n行,按照学号从小到大的顺序输出每一个学生的信息。
输入样例:
6
0001 MeiK 20 M
0001 Anna 20 M
0002 sdk2 21 M
0002 Chris 21 M
0002 Kare 21 M
0000 blf2 22 F
输出样例:
3
0000 blf2 22 F
0001 Anna 20 M
0002 Kare 21 M
代码实现
import java.util.*;
import java.util.Scanner;
import java.util.TreeMap;
public class Main {
public static void main(String[] args) {
Scanner cin = new Scanner(System.in);
int n = cin.nextInt();
cin.nextLine();
Map<String, String> map = new TreeMap<String, String>();
for (int i = 0; i < n; i++) {
String s = cin.nextLine();
String t = s.substring(0, 4);//提取学号的前四个作为键
map.put(t, s);//将学号的前四个字符作为键 学生信息字符串作为值 存在TreeMap中
}
System.out.println(map.size());
for (String it : map.keySet())//增强型for循环,遍历map中键集合,每次迭代将键赋值给it,it代表当前迭代的键
{
System.out.println(map.get(it));//获取it对应的值,即学生信息字符串
}
}
}
7-4 sdut-LinkedHashMap--C~K的班级(IV)
分数 10
全屏浏览题目
作者 周雪芹
单位 山东理工大学
经过不懈的努力,C~K终于当上了班主任。
现在他要统计班里学生的名单,但是C~K在教务系统中导出班级名单时出了问题,发现有学号相同的学生。学号相同,代表同一个学生。(如果学号相同,后来读入的学生信息会覆盖已有的学生信息)
但是工作量太大了,所以找到了会编程的你,你能帮他解决这个问题吗?
输入格式:
第一行输入一个N,代表C~K导出的名单共有N行。
接下来的N行,每一行包括一个学生的信息,数据之间用1个空格分隔,如:学号 姓名 年龄 性别。
输出格式:
第一行输出一个n,代表数据处理之后C~K的班级共有几人。
接下来的n行,按照学号输入
顺序输出每一个学生的信息。
输入样例:
7
0001 MeiK 20 M
0001 Anna 20 M
0002 sdk2 21 M
0002 Chris 21 M
0002 Kare 21 M
0000 blf2 22 F
0000 Maker 23 M
输出样例:
3
0001 Anna 20 M
0002 Kare 21 M
0000 Maker 23 M
import java.util.*;
public class Main {
public static void main(String[] args) {
Scanner cin = new Scanner(System.in);
int n = cin.nextInt();
cin.nextLine();
// 使用LinkedHashMap来保留插入顺序
Map<String, String> map = new LinkedHashMap<>();
for (int i = 1; i <= n; i++) {
String s = cin.nextLine();
String t = s.substring(0, 4);
map.put(t, s);
}
System.out.println(map.size());
for (String it : map.keySet()) {
System.out.println(map.get(it));
}
}
}
7-8 sdut-Collection(Map) 读中国载人航天史,汇航天员数量,向航天员致敬(2)
分数 10
全屏浏览题目
作者 周雪芹
单位 山东理工大学
1986年,中国实施“863”计划,航天技术列入其中。以载人飞船开始起步,最终建成我国的空间站。 1992年9月21日,中国实施载人航天工程,并确定了三步走的发展战略:第一步,发射载人飞船,建成初步配套的试验性载人飞船工程。第二步,突破载人飞船和空间飞行器的交会对接技术,利用载人飞船技术改装、发射一个空间实验室。第三步,建造载人空间站。
在长期的奋斗中,我国航天工作者不仅创造了非凡的业绩,而且铸就了特别能吃苦、特别能战斗、特别能攻关、特别能奉献的载人航天精神。载人航天精神,是“两弹一星”精神在新时期的发扬光大,是我们伟大民族精神的生动体现,永远值得全党、全军和全国人民学习。
截至2021年4月,历任航天英雄名字如下:
杨利伟(神舟五号)
费俊龙、聂海胜(神舟六号)
翟志刚、景海鹏、刘伯明(神舟七号)
景海鹏、刘旺、刘洋(神舟九号)
聂海胜、张晓光、王亚平(神舟十号)
景海鹏、陈东(神舟十一号)
会编程的小伙伴们,请以他们姓名中的拼音字母排序,统计一下航天英雄们出征太空的次数,以实际行动向航天员们致敬!
输入格式:
每次航天飞船的编号为一行读入数据,分别读入每次飞上太空的航天英雄的姓名,名字中间有若干个空格分隔。
最后一行为“end“,表示输入结束。
输出格式:
以他们姓名中的拼音字母排序,统计航天英雄们出征太空的次数。
每位航天员占一行,航天员姓名与出征次数中间有一个空格。
输入样例:
YangLiWei杨利伟
FeiJunLong费俊龙 NieHaiSheng聂海胜
Zhaizhigang翟志刚 JingHaiPeng景海鹏 LiuBoMing刘伯明
JingHaiPeng景海鹏 LiuWang刘旺 LiuYang刘洋
NieHaiSheng聂海胜 Zhangxiaoguang张晓光 WangYaPing王亚平
JingHaiPeng景海鹏 ChenDong陈东
end
输出样例:
ChenDong陈东 1
FeiJunLong费俊龙 1
JingHaiPeng景海鹏 3
LiuBoMing刘伯明 1
LiuWang刘旺 1
LiuYang刘洋 1
NieHaiSheng聂海胜 2
WangYaPing王亚平 1
YangLiWei杨利伟 1
Zhaizhigang翟志刚 1
Zhangxiaoguang张晓光 1
代码实现
import java.util.*;
import java.util.Map.Entry;
public class Main{
public static void main(String[] args){
Scanner cin=new Scanner(System.in);
Map<String,Integer> map=new TreeMap<String,Integer>();
/*这里创建了一个TreeMap对象,它会按照键的自然顺序进行排序
Map接口表示键值对的集合 键是String类型 值是Integer类型
map = new TreeMap<String, Integer>(); 创建了一个实现了Map接口的具体类的对象,这个具体类是 TreeMap。
TreeMap是按照键的自然顺序进行排序的有序映射。
map 是程序中引用这个映射的变量名,你可以使用这个变量来操作和访问这个映射中的数据。
*/
while(true)
{
String s=cin.next();
if(s.equals("end")) break;
if(map.containsKey(s)) map.put(s,map.get(s)+1);
//如果map中已经包含该字符串 对应值加1
else map.put(s,1);
}
for(Map.Entry<String,Integer> entry:map.entrySet())//增强型for循环输出
{
System.out.println(entry.getKey()+" "+entry.getValue());
}
}
}
7-9 sdut-Collection(List) 读中国载人航天史,汇航天员数量,向航天员致敬(3)
分数 10
全屏浏览题目
作者 周雪芹
单位 山东理工大学
1986年,中国实施“863”计划,航天技术列入其中。以载人飞船开始起步,最终建成我国的空间站。 1992年9月21日,中国实施载人航天工程,并确定了三步走的发展战略:第一步,发射载人飞船,建成初步配套的试验性载人飞船工程。第二步,突破载人飞船和空间飞行器的交会对接技术,利用载人飞船技术改装、发射一个空间实验室。第三步,建造载人空间站。
在长期的奋斗中,我国航天工作者不仅创造了非凡的业绩,而且铸就了特别能吃苦、特别能战斗、特别能攻关、特别能奉献的载人航天精神。载人航天精神,是“两弹一星”精神在新时期的发扬光大,是我们伟大民族精神的生动体现,永远值得全党、全军和全国人民学习。
截至2021年4月,历任航天英雄名字如下:
杨利伟(神舟五号)
费俊龙、聂海胜(神舟六号)
翟志刚、景海鹏、刘伯明(神舟七号)
景海鹏、刘旺、刘洋(神舟九号)
聂海胜、张晓光、王亚平(神舟十号)
景海鹏、陈东(神舟十一号)
会编程的小伙伴们,请以他们出征太空的先后顺序,输出航天英雄们的名字,以实际行动向航天员们致敬!
输入格式:
每次航天飞船的编号为一行读入数据,分别读入每次飞上太空的航天英雄的姓名,名字中间有一个空格分隔。
最后一行为“end“,表示输入结束。
输出格式:
以出征太空的先后顺序,输出航天英雄们的姓名。每位航天员占一行。
输入样例:
杨利伟
费俊龙 聂海胜
翟志刚 景海鹏 刘伯明
景海鹏 刘旺 刘洋
聂海胜 张晓光 王亚平
景海鹏 陈东
end
输出样例:
杨利伟
费俊龙
聂海胜
翟志刚
景海鹏
刘伯明
刘旺
刘洋
张晓光
王亚平
陈东
代码实现
import java.util.ArrayList;
import java.util.List;
import java.util.Scanner;
public class pta09 {
public static void main(String[] args)
{
Scanner in=new Scanner(System.in);
List<String> list=new ArrayList<String>();
while(true){
String s=in.next();
if(s.equals("end")) break;
else if(list.contains(s)) continue;
else
{
list.add(s);
System.out.println(s);
}
}
}
}
7-10 sdut-String+array(LinkedHashMap) 读中国载人航天史,汇航天员数量,向航天员致敬(1)
分数 10
全屏浏览题目
作者 周雪芹
单位 山东理工大学
1986年,中国实施“863”计划,航天技术列入其中。以载人飞船开始起步,最终建成我国的空间站。
1992年9月21日,中国实施载人航天工程,并确定了三步走的发展战略:第一步,发射载人飞船,建成初步配套的试验性载人飞船工程。第二步,突破载人飞船和空间飞行器的交会对接技术,利用载人飞船技术改装、发射一个空间实验室。第三步,建造载人空间站。
在长期的奋斗中,我国航天工作者不仅创造了非凡的业绩,而且铸就了特别能吃苦、特别能战斗、特别能攻关、特别能奉献的载人航天精神。载人航天精神,是“两弹一星”精神在新时期的发扬光大,是我们伟大民族精神的生动体现,永远值得全党、全军和全国人民学习。
截至2021年4月,历任航天英雄名字如下:
杨利伟(神舟五号)
费俊龙、聂海胜(神舟六号)
翟志刚、景海鹏、刘伯明(神舟七号)
景海鹏、刘旺、刘洋(神舟九号)
聂海胜、张晓光、王亚平(神舟十号)
景海鹏、陈东(神舟十一号)
会编程的小伙伴们,请以他们出征太空的先后顺序,统计一下航天英雄们出征太空的次数,以实际行动向航天员们致敬!
输入格式:
每次航天飞船的编号为一行读入数据,分别读入每次飞上太空的航天英雄的姓名,名字中间有一个空格分隔。
最后一行为“end“,表示输入结束。
提示:目前,中国航天员的数量小于20。
输出格式:
以出征太空的先后顺序,统计航天英雄们出征太空的次数。
每位航天员占一行,航天员姓名与出征次数中间有一个空格。
输入样例:
杨利伟
费俊龙 聂海胜
翟志刚 景海鹏 刘伯明
景海鹏 刘旺 刘洋
聂海胜 张晓光 王亚平
景海鹏 陈东
end
输出样例:
杨利伟 1
费俊龙 1
聂海胜 2
翟志刚 1
景海鹏 3
刘伯明 1
刘旺 1
刘洋 1
张晓光 1
王亚平 1
陈东 1
代码实现
方法一
import java.util.*;
public class Main{
public static void main(String[] args)
{
Scanner cin=new Scanner(System.in);
String[] c=new String[100];//姓名
int n=0;
int i;
int [] t=new int[100];//次数
while(true)
{
int flag=0;//用于标记是否已经遇到了相同的单词
String s=cin.next();
if(s.equals("end")) break;//如果输入了end 就结束循环
for(i=0;i<n;i++)//遍历数组c 检查当前输入的姓名是否已经存在于c当中
{
if(c[i].equals(s))
{
flag=1;//若存在 标记为1 并跳出循环
break;
}
}
if(flag==1) t[i]++;
else
{
t[n]=1;
c[n]=s;
n++;
}
}
for(i=0;i<n;i++)
{
System.out.println(c[i]+" "+t[i]);
}
}
}
方法二
//package answer;
import java.util.LinkedHashMap;
import java.util.Map;
import java.util.Scanner;
import java.util.TreeMap;
public class Main {
public static void main(String[] args)
{
Scanner in=new Scanner(System.in);
Map<String,Integer> map=new LinkedHashMap<>();
while(true)
{
String s=in.next();
if(s.equals("end")) break;
else if(map.containsKey(s)) map.put(s,map.get(s)+1);
else map.put(s,1);
}
for(Map.Entry<String ,Integer> it: map.entrySet())
System.out.println(it.getKey()+" "+it.getValue());
}
}