方法一:
将每种类型的分数存储在ArrayList<Integer> 中,然后就好做了。
通过list.size()输出每种类型的个数。
通过list.size()比较后输出类型数量最多的那个。
通过比较list.size()得到类型数量最多的那个并输出list中的内容。
方法二:
先将输入的分数进行排序,将分数分段的节点放在一个数组中。
存储每一个分数类型所在的节点,由于数组已经排序,所以节点就是这个类型结束的索引。把节点存储在flag[6]中。
使用flag的好处是方便输出类型数量最多的那个,而且数组已经排序,可以不用再排序。
相比方法一节省空间。
方法一代码:
import java.awt.List; import java.lang.reflect.Array; import java.util.ArrayList; import java.util.Arrays; import java.util.Collections; import java.util.HashMap; import java.util.Scanner; public class 分数统计 { public static void main(String[] args) { Scanner sc=new Scanner(System.in); int n=sc.nextInt(); int arr[]=new int[n]; for (int i = 0; i < arr.length; i++) { arr[i]=sc.nextInt(); } //遍历 ArrayList<Integer> listA=new ArrayList<Integer>(); ArrayList<Integer> listB=new ArrayList<Integer>(); ArrayList<Integer> listC=new ArrayList<Integer>(); ArrayList<Integer> listD=new ArrayList<Integer>(); ArrayList<Integer> listE=new ArrayList<Integer>(); for (int i = 0; i < arr.length; i++) { int x=arr[i]; if (x>=90 && x<=100) { listA.add(x); }if (x>=80 && x<=89) { listB.add(x); }if (x>=70 && x<=79) { listC.add(x); }if (x>=60 && x<=69) { listD.add(x); }if (x>=0 && x<=59) { listE.add(x); } } //输出每个阶段的数量 System.out.print(listA.size()+" "); System.out.print(listB.size()+" "); System.out.print(listC.size()+" "); System.out.print(listD.size()+" "); System.out.println(listE.size()); //输出最多的数量 int maxNum=0; ArrayList<Integer> result=new ArrayList<Integer>(); for (int i = 0; i < arr.length; i++) { if (maxNum<listA.size()) { maxNum=listA.size(); result=listA; }if (maxNum<listB.size()) { maxNum=listB.size(); result=listB; }if (maxNum<listC.size()) { maxNum=listC.size(); result=listC; }if (maxNum<listD.size()) { maxNum=listD.size(); result=listD; }if (maxNum<listE.size()) { maxNum=listE.size(); result=listE; } } System.out.println(maxNum);//输出 Collections.sort(result); for (int i = result.size()-1; i >=0; i--) { System.out.print(result.get(i)+" "); } } }
方法二代码:
import java.util.Arrays; import java.util.Scanner; public class 分数统计_方法二 { /** * @param args */ public static void main(String[] args) { // TODO Auto-generated method stub Scanner sc=new Scanner(System.in); int n=sc.nextInt(); int maxflag=0;//最大节点 int maxNum=0;//最大数量 int grades[]={100,90,80,70,60,0};//分数节点 int flag[]=new int[6];//每个分数节点的分割点索引,第一个为0 int score[]=new int[n+1]; //输入分数 for (int i = 0; i < n; i++) { score[i]=sc.nextInt(); } //添加一个结尾 score[n]=-1; int j=score.length-1; Arrays.sort(score);//分数排序,升序 for (int i = 1; i <=5; i++) { int tempNum=0;//临时存储类型的个数 while (score[j]>=grades[i]) { tempNum++; j--; } System.out.print(tempNum+" ");//输出每个类型分数的数量 flag[i]=flag[i-1]+tempNum; if (maxNum<tempNum) { maxNum=tempNum; maxflag=i;//类型最多的那个节点所在第i个类型 } } System.out.println(); //输出最大的类型数量 System.out.println(maxNum); //输出最大类型数量中的分数 for (int i = n-flag[maxflag-1]; i >n-flag[maxflag]; i--) { System.out.print(score[i]+" "); } } }
0.0分
0 人评分