集合

一、函数

1、List中指定元素的删除

编写以下两个函数

1 /*以空格(单个或多个)为分隔符,将line中的元素抽取出来,放入一个List*/
2 public static List<String> convertStringToList(String line) 
3 /*在list中移除掉与str内容相同的元素*/
4 public static void remove(List<String> list, String str)

裁判测试程序:

 1 public class Main {
 2 
 3     /*covnertStringToList函数代码*/   
 4 
 5     /*remove函数代码*/
 6 
 7      public static void main(String[] args) {
 8         Scanner sc = new Scanner(System.in);
 9         while(sc.hasNextLine()){
10             List<String> list = convertStringToList(sc.nextLine());
11             System.out.println(list);
12             String word = sc.nextLine();
13             remove(list,word);
14             System.out.println(list);
15         }
16         sc.close();
17     }
18 
19 }

样例说明:底下展示了4组测试数据。

###输入样例

1 2 1 2 1 1 1 2
1
11 1 11 1 11
11
2 2 2 
1
1   2 3 4 1 3 1
1

###输出样例

[1, 2, 1, 2, 1, 1, 1, 2]
[2, 2, 2]
[11, 1, 11, 1, 11]
[1, 1]
[2, 2, 2]
[2, 2, 2]
[1, 2, 3, 4, 1, 3, 1]
[2, 3, 4, 3]
 1 public static List<String> convertStringToList(String line) {
 2         List<String> a=new ArrayList<String>();
 3         String s[]=line.split("\\s+");
 4         for(int i=0;i<s.length;i++) {
 5             a.add(s[i]);
 6         }
 7         return a;
 8     }
 9     public static void remove(List<String> list, String str) {
10         for(int i=0;i<list.size();) {
11             if(list.get(i).equals(str)) {
12                 list.remove(i);
13                 i=0;
14             }else {
15                 i++;
16             }
17         }
18     }

2、教师、学生排序

已知Main类、Person类的设计,完成Student类,Teacher类、MyTool类的设计。

函数接口定义:

class Student extends Person{ }
class Teacher extends Person{ }
class MyTool{ public static void separateStu_T(List persons,List teachers,List students){}   }

Student类继承了Person,拥有私有属性int类型的sno和String类型的major,分别代表学号与所学专业;提供对应的set,get方法;比较方法完成按照学号比较。
Teacher类继承了Person,拥有私有属性int类型的tno和String类型的subject,分别代表教师编号与所授科目;提供对应的set,get方法;比较方法完成按年龄比较。
MyTool类中提供方法public static void separateStu_T(List persons,List teachers,List students){},方法 separateStu_T的功能是将persons线性表中的 teacher,student分别放到teachers,students两个线性表中。

裁判测试程序样例:

  1 import java.util.*;
  2 
  3 public class Main {
  4     public static void main(String[] args) {
  5 
  6      List persons=getPersons();  //得到一个所有人的线性表
  7 
  8         List teachers=new ArrayList();
  9         List students=new ArrayList();
 10 
 11         MyTool.separateStu_T( persons,teachers,students); //将persons线性表中的 teacher,student分别放到teachers,students两个线性表中
 12 
 13         Collections.sort(teachers);  //对教师线性表排序
 14         Collections.sort(students);  //对学生线性表排序
 15 
 16         showResult(teachers);  //显示教师线性表排序以后的结果
 17         showResult(students);  //显示学生线性表排序以后的结果
 18 
 19     }
 20 
 21     public static List getPersons()
 22     {
 23         List persons=new ArrayList();
 24 
 25         Scanner in=new Scanner(System.in);
 26         Person person=null;
 27 
 28         int num=Integer.parseInt(in.nextLine());
 29 
 30         for(int i=0;i<num;i++)
 31         {    String str=in.nextLine();
 32             String []data=str.split(",");
 33 
 34             if(data[0].equalsIgnoreCase("student"))
 35                  person=new Student(Integer.parseInt(data[1]),data[2],data[3],Integer.parseInt(data[4]),data[5]);
 36             else if (data[0].equalsIgnoreCase("teacher"))
 37                   person=new Teacher(Integer.parseInt(data[1]),data[2],data[3],Integer.parseInt(data[4]),data[5]);
 38             else person=null;
 39                  persons.add(person);
 40         }
 41         return persons;
 42     }
 43 
 44     public static void showResult(List persons)
 45     {
 46         for(int i=0;i<persons.size();i++)
 47         {
 48             Person per=(Person)persons.get(i);
 49             System.out.println(per.getName()+","+per.getGender()+","+per.getAge());
 50         }
 51     }
 52 
 53 
 54 }    
 55 
 56 
 57 
 58 abstract class Person  implements Comparable
 59 {    private String name;
 60      private String gender;
 61      private int age;
 62 
 63 
 64     public String getName() {
 65         return name;
 66     }
 67 
 68 
 69     public void setName(String name) {
 70         this.name = name;
 71     }
 72 
 73 
 74     public String getGender() {
 75         return gender;
 76     }
 77 
 78 
 79     public void setGender(String gender) {
 80         this.gender = gender;
 81     }
 82 
 83     public int getAge() {
 84         return age;
 85     }
 86 
 87     public void setAge(int age) {
 88         this.age = age;
 89     }
 90 
 91     public Person(String name, String gender, int age) {
 92         super();
 93         this.name = name;
 94         this.gender = gender;
 95         this.age = age;
 96     }
 97 
 98 
 99 }
100 
101 /* 请在这里写你的代码 */

输入样例:

输入的第一行是总人数n,紧跟着输入n行,每一行代表一个人的信息。下面的例子中n=5,输入了5个人的信息。

5
student,1001,Tom1,female,18,computer
teacher,2001,Jake1,female,35,datastructer
student,1002,Tom2,male,19,computer
student,1003,Tom3,female,20,software
teacher,2002,Jake2,female,33,database

输出样例:

注意:本样例输出结果中两名教师是按照年龄升序排序的,三名学生是按照学号降序排序的。

Jake2,female,33
Jake1,female,35
Tom3,female,20
Tom2,male,19
Tom1,female,18
class Student extends Person{
    private int sno;
    private String major;

    public Student(int sno, String name, String gender, int age, String major) {
        super(name, gender, age);
        this.sno = sno;
        this.major = major;
    }

    @Override
    public int compareTo(Object o) {
        return -(this.sno - ((Student)o).getSno());
    }

    public int getSno() {
        return sno;
    }

    public String getMajor() {
        return major;
    }

    public void setSno(int sno) {
        this.sno = sno;
    }

    public void setMajor(String major) {
        this.major = major;
    }
}

class Teacher extends Person{
    private int tno;
    private String subject;

    public Teacher(int tno, String name, String gender, int age, String subject) {
        super(name, gender, age);
        this.tno = tno;
        this.subject = subject;
    }

    @Override
    public int compareTo(Object o) {
        return this.getAge() - ((Teacher)o).getAge();
    }

    public int getTno() {
        return tno;
    }

    public String getSubject() {
        return subject;
    }

    public void setTno(int tno) {
        this.tno = tno;
    }

    public void setSubject(String subject) {
        this.subject = subject;
    }
}

class MyTool{
    public static void separateStu_T(List persons,List teachers,List students){
        for( Object o : persons ){
            if( o instanceof Student ){
                students.add(o);
            }
            else if( o instanceof Teacher ){
                teachers.add(o);
            }
        }
    }
}

二、编程题

1、ArrayList入门

本习题主要用于练习如何使用ArrayList来替换数组。
新建1个ArrayList<String> strList用来存放字符串,然后进行如下操作。

**提示:**查询Jdk文档中的ArrayList。
**注意:**请使用System.out.println(strList)输出列表元素。

输入格式:

  1. 输入n个字符串,放入strList。直到输入为!!end!!时,结束输入。
  2. strList头部新增一个begin,尾部新增一个end
  3. 输出列表元素
  4. **输入:**字符串str
  5. 判断strList中有无包含字符串str,如包含输出true,否则输出false。并且输出下标,没包含返回-1。
  6. 在strList中从后往前找。返回其下标,找不到返回-1。
  7. 移除掉第1个(下标为0)元素,并输出。然后输出列表元素。
  8. **输入:**字符串str
  9. 将第2个(下标为1)元素设置为字符串str.
  10. 输出列表元素
  11. **输入:**字符串str
  12. 遍历strList,将字符串中包含str的元素放入另外一个ArrayList strList1,然后输出strList1。
  13. 在strList中使用remove方法,移除第一个和str相等的元素。
  14. 输出strList列表元素。
  15. 使用clear方法,清空strList。然后输出strList的内容,size()isEmpty(),3者之间用,连接。

输入样例:

a1 b1 3b a2 b2 12b c d !!end!!
b1
second
b

输出样例:

[begin, a1, b1, 3b, a2, b2, 12b, c, d, end]
true
2
2
begin
[a1, b1, 3b, a2, b2, 12b, c, d, end]
[a1, second, 3b, a2, b2, 12b, c, d, end]
[3b, b2, 12b]
[a1, second, 3b, a2, b2, 12b, c, d, end]
[],0,true
 1 import java.util.ArrayList;
 2 import java.util.Scanner;
 3 
 4 public class Main {
 5         
 6     public static void main(String[] args){
 7         Scanner in = new Scanner(System.in);
 8         ArrayList<String> strList = new ArrayList<>();
 9         while(true)
10         {
11             String s = in.next();
12             if(s.equals("!!end!!"))
13                 break;
14             strList.add(s);
15         }
16         strList.add(0, "begin");
17         strList.add("end");
18         System.out.println(strList);
19         String str = in.next();
20         System.out.println(strList.contains(str));
21         System.out.println(strList.indexOf(str));
22         System.out.println(strList.lastIndexOf(str));
23         System.out.println(strList.get(0));
24         strList.remove(0);
25         System.out.println(strList);
26         str = in.next();
27         strList.set(1, str);
28         System.out.println(strList);
29         str = in.next();
30         ArrayList<String> strList1 = new ArrayList<>();
31         for(int i=0;i<strList.size();i++)
32         {
33             if(strList.get(i).contains(str))
34                 strList1.add(strList.get(i));
35         }
36         System.out.println(strList1);
37         strList.remove(str);
38         System.out.println(strList);
39         strList.clear();
40         System.out.println(strList+","+strList.size()+","+strList.isEmpty());
41     }
42 }

2、字符串集合求并集 

从键盘接收N个英文字符串(其中不同的字符串数量大于10),从头开始取5个不同的字符串放入一个集合S1,然后接着取5个不同的字符串放入另一个集合S2,按照字母顺序输出S1和S2的并集中的每个字符串(字符串区分大小写)

输入格式:

一行以空格分开的英文字符串(不同的字符串数量大于10)。

输出格式:

按照字母顺序(先比较字符串首字母,首字母相同的比较字符串第二个字母,以此类推)输出的S1和S2并集的字符串。

输入样例:

android python java javaee javase database java jsp servlet java algorithm junit

输出样例:

algorithm
android
database
java
javaee
javase
jsp
python
servlet
 1 import java.util.Iterator;
 2 import java.util.Scanner;
 3 import java.util.TreeSet;
 4 
 5 public class Main{
 6     public static void main(String[] args) {
 7         Scanner sc = new Scanner(System.in);
 8         String str =sc.nextLine();
 9         String[] s = str.split(" ");//分割字符串
10         TreeSet<String> s1 = new TreeSet<String>();
11         TreeSet<String> s2 = new TreeSet<String>();
12         int i = 0;
13         //取字符串放入TreeSet集合
14         while(s1.size() < 5 && i < s.length){
15             s1.add(s[i++]);
16         }
17         while(s2.size() < 5 && i < s.length){
18             s2.add(s[i++]);
19         }
20         //把两个TreeSet集合放入新的TreeSet集合---》目的:自动排序所有字符串
21         TreeSet<String> s3 = new TreeSet<String>();
22         s3.addAll(s1);
23         s3.addAll(s2);
24         //输出
25         Iterator it = s3.iterator();
26         while(it.hasNext()){
27             System.out.println(it.next());
28         }
29     }
30 }

3、统计一段文字中的单词个数并按单词的字母顺序排序后输出 

现需要统计若干段文字(英文)中的不同单词数量。
如果不同的单词数量不超过10个,则将所有单词输出(按字母顺序),否则输出前10个单词。

注1:单词之间以空格(1个或多个空格)为间隔。
注2:忽略空行或者空格行。
注3:单词大小写敏感,即'word'与'WORD'是两个不同的单词 。 ###输入说明 若干行英文,最后以!!!!!为结束。

###输出说明 不同单词数量。 然后输出前10个单词(按字母顺序),如果所有单词不超过10个,则将所有的单词输出。

输入样例:

Failure is probably the fortification in your pole
It is like a peek your wallet as the thief when you
are thinking how to spend several hard-won lepta
when you Are wondering whether new money it has laid
background Because of you, then at the heart of the
most lax alert and most low awareness and left it
godsend failed
!!!!!

输出样例:

49
Are
Because
Failure
It
a
alert
and
are
as
at
 1 import java.util.*;
 2  
 3 public class Main {
 4     public static void main(String[] args) {
 5         Scanner sc = new Scanner(System.in);
 6         Set<String> set = new TreeSet<String>();
 7         while(true) {
 8             String str;
 9             str = sc.next();
10             if(str.equals("!!!!!")) {
11                 break;
12             }
13             else {
14                 set.add(str);
15             }
16         }
17         System.out.println(set.size());
18         if(set.size() < 10) {
19             for(String str: set) {
20                 System.out.println(str);
21             }
22         }
23         else {
24             int count = 0;
25             for(String str: set) {
26                 if(count == 10) {
27                     break;
28                 }
29                 else {
30                     System.out.println(str);
31                     ++count;
32                 }
33             }
34         }
35         sc.close();
36     }
37 }

4、学生成绩读取与排序

1)从键盘录入多行学生成绩的信息,每行表示一个学生的一门课的成绩,最后一行以“exit”结束。每行文本的格式为:学号,姓名,课程名,成绩。程序能够读取学生及其成绩,将具有相同学号的学生及其成绩读取到一个Student(学生类)类对象的列表(List)stuList中; 2)程序在读取完学生及其成绩的数据后,能够将stuList中的学生按照平均成绩降序排列(如果平均成绩相同,学号数字小的排在前面), 并输出排序后的学生学号、姓名和成绩。

输入格式:

多行表示的学生成绩,每一行是一个学生的姓名、学号、课程名、成绩(整数)。不同行可以是同一名学生(学号相同的为同一名学生)不同课程的成绩。

输出格式:

按照学生平均成绩降序排序(平均成绩相同的学号小的在前面)的学生排名(具体输出格式参照样例)。

输入样例:

小明,2001,Java,88
小刚,2002,Java,78
小丁,2003,Java,56
小宏,2004,Java,85
小明,2001,Python,84
小刚,2002,Python,98
小丁,2003,JavaWeb,66
小宏,2004,Algorithm,87
exit

输出样例:

No1:2002,小刚
No2:2001,小明
No3:2004,小宏
No4:2003,小丁
 1 import java.util.*;
 2 class Student implements Comparable<Student>{
 3     private String name,id;
 4     private int subject=1;
 5     private int score;
 6     private double sum=0;
 7     Student(){}
 8     Student(String name,String id,int score){
 9              this.name=name;
10              this.id=id;
11              this.score=score;
12     }
13     public String getid(){
14         return this.id;
15     }
16     public void subjectadd() {
17         this.subject++;
18     }
19     public void scoreadd(int score){
20         this.score=this.score+score;
21     }
22     public String getname() {
23         return this.name;
24     }
25     public void sum() {
26         this.sum=this.score/this.subject;
27     }
28    /*public int rescore() {
29         return this.score;
30     }*/
31    /* public double getsum(){
32         return this.sum;
33     }*/
34     public int compareTo(Student o1){
35                Student one = (Student) o1;
36                if(this.sum-one.sum!=0)
37                return (int)(one.sum-this.sum);
38                else
39                return this.id.compareTo(one.id);
40     }
41 }
42 public class Main{
43     public static void main(String[] args) {
44             Scanner sc=new Scanner(System.in);
45             List<Student> list =new ArrayList<Student>();
46             int i,flag=0;
47             String k;
48             String[] and =new String[5];
49 
50             while(sc.hasNext())
51             {
52                 k=sc.next();
53                 and=k.split(",");
54                 if(k.compareTo("exit")==0)
55                 break;
56                 for(i=0;i<list.size();i++)
57                 {
58                     if(list.get(i).getid().compareTo(and[1])==0)
59                     {
60                         flag=1;
61                         break;
62                     }
63                 }
64                 if(flag==1)
65                 {
66                     list.get(i).subjectadd();
67                     list.get(i).scoreadd(Integer.parseInt(and[3]));
68                 }
69                 else
70                 {
71                     list.add(new Student(and[0],and[1],Integer.parseInt(and[3])));
72                 }
73                 flag=0;
74             }
75             for(i=0;i<list.size();i++)
76             list.get(i).sum();
77             Collections.sort(list);
78             for(i=0;i<list.size();i++)
79             {
80                 
81                 System.out.println("No"+(i+1)+":"+list.get(i).getid()+","+list.get(i).getname());
82                 //System.out.println(list.get(i).rescore());
83             }
84 
85     }
86 }

5、多数组排序

3个整数数组进行整体排序,根据输入的三个数组的元素,输出排序后的结果(从大到小)

输入格式:

第1个数组的长度

第1个数组的各个元素

第2个数组的长度

第2个数组的各个元素

第3个数组的长度

第3个数组的各个元素

输出格式:

所有数组的整体排序

输入样例:

在这里给出一组输入。例如:

3 
79 80 61
3
88 66 77
2
23 90

输出样例:

在这里给出相应的输出。例如:

90 88 80 79 77 66 61 23
 1 import java.util.Scanner;
 2 import java.util.Arrays;
 3 public class Main {
 4     public static void main(String []args)
 5     {
 6         Scanner s=new Scanner(System.in);
 7         int a=s.nextInt();
 8         int i;
 9         int []arr1=new int [a];
10         for(i=0;i<a;i++)
11         {
12             arr1[i]=s.nextInt();
13         }
14         int b=s.nextInt();
15         int []arr2=new int [b];
16         for(i=0;i<b;i++)
17         {
18             arr2[i]=s.nextInt();
19         }
20         int c=s.nextInt();
21         int []arr3=new int [c];
22         for(i=0;i<c;i++)
23         {
24             arr3[i]=s.nextInt();
25         }
26         int [] ee = new int[a + b + c];
27         System.arraycopy(arr1, 0, ee, 0, a);
28         System.arraycopy(arr2, 0, ee, a, b);
29         System.arraycopy(arr3, 0, ee, a + b, c);
30         Arrays.sort(ee);
31         System.out.print(ee[ee.length-1]);
32         for(i=ee.length-2;i>=0;i--)
33         {
34             System.out.print(" " + ee[i]);
35         }
36         s.close();
37     }
38 }

6、读中国载人航天史,汇航天员数量,向航天员致敬 

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
 1 import java.util.*;
 2 import java.util.Map.Entry;
 3 
 4 
 5 
 6 public class Main {
 7 
 8     public static void main(String[] args) {
 9         // TODO Auto-generated method stub
10         Scanner sc = new Scanner(System.in);
11        Map<String,Integer> mp=new TreeMap<String,Integer>();
12        String s=sc.next();
13        while(s.charAt(0)!='e'&&s.charAt(0)!='n'&&s.charAt(0)!='d') {
14            //System.out.println(s.charAt(0));
15            if(mp.containsKey(s)) {
16                mp.put(s, mp.get(s)+1);              
17            }else {                
18                mp.put(s, 1);
19            }
20            s=sc.next();
21 
22        }
23       
24        
25        
26        /*啊啊啊啊我这个憨批为什么会看成按次数排序啊啊啊啊
27        List<Map.Entry<String,Integer>> list = new ArrayList<Map.Entry<String,Integer>>(mp.entrySet());
28 
29        Collections.sort(list,new Comparator<Map.Entry<String,Integer>>()
30        {
31 
32            @Override
33            public int compare(Entry<String, Integer> o1, Entry<String, Integer> o2) {
34             // TODO Auto-generated method stub
35              return o1.getValue().compareTo(o2.getValue());
36            }
37         
38        }   );
39 
40        for(Map.Entry<String,Integer> mapping:list){ 
41 
42            System.out.println(mapping.getKey()+" "+mapping.getValue()); 
43 
44       } */
45 
46 
47         Iterator it=mp.entrySet().iterator();
48         while(it.hasNext()) {
49             Entry ex =(Entry)it.next();
50             System.out.println(ex.getKey()+" "+ex.getValue()); 
51         }
52         
53     }
54 
55 }

 

posted @ 2021-08-23 16:33  咖啡布丁  阅读(255)  评论(0)    收藏  举报
levels of contents