1004
开始打算这样判断,这样有问题,就是输入三行数据且中间值为最大值时,输出j=2,明显错误。
package com.company; import java.util.Scanner; public class Main { public static void main(String[] args) throws Exception{ // write your code here Scanner sc=new Scanner(System.in); int n=Integer.parseInt(sc.nextLine()); String[][] nameId=new String[n][3]; int i,j; int[] score=new int[n]; //全部输入 for(i=0;i<n;i++){ nameId[i][0]=sc.next(); nameId[i][1]=sc.next(); score[i]=sc.nextInt(); nameId[i][2]=Integer.toString(score[i]); } bgm:for(j=0;j<n;j++){ //将输入内容输出 //System.out.println(nameId[j][0]+" "+nameId[j][1]+" "+nameId[j][2]); //判断最高成绩 if(score[0]>score[j]){ j=0; break ; } if(score[n-1]>score[j]){ j=n-1; break ; } for (int x = 0; x < j; x++) { for (int y = j + 1; y < n; y++) { if ((score[j] > score[x]) & (score[j] > score[y])) { break bgm; } } } } System.out.println(j);//输出最大值下标 } }
想办法改进
package com.company; import java.util.Scanner; public class Main { public static void main(String[] args) throws Exception{ // write your code here Scanner sc=new Scanner(System.in); int n=Integer.parseInt(sc.nextLine()); String[][] nameId=new String[n][3]; int i,j,k; int[] score=new int[n]; //全部输入 for(k=0;k<n;k++){ nameId[k][0]=sc.next(); nameId[k][1]=sc.next(); score[k]=sc.nextInt(); nameId[k][2]=Integer.toString(score[k]); } //输出最大值i int max=score[0]; for(i=0;i<n;i++){ if(score[i]>=max) { max=score[i]; } } for(i=0;i<n;i++) { if(max==score[i]) { break; }; } //输出最小值j int min=score[0]; for(j=0;j<n;j++){ if(score[j]<=min) { min=score[j]; } } for(j=0;j<n;j++) { if(min==score[j]) { break; }; } //输出结果 System.out.println(nameId[i][0]+" "+nameId[i][1]); System.out.println(nameId[j][0]+" "+nameId[j][1]); } }
其实简单改造之后,就能达到目的,之前想的太复杂,大道至简。
勿在浮沙筑高台