初级题:从考试成绩中划出及格线
10个学生考完期末考试评卷完成后,A老师需要划出及格线,要求如下:
(1)
及格线是10的倍数;
(2) 保证至少有60%的学生及格;
(3) 如果所有的学生都高于60分,则及格线为60分
输入样例:61 51 49
30 20 10 70 80 90 99
输出样例:50
import java.util.Scanner; /** * * @author Linda *初级题:从考试成绩中划出及格线 10个学生考完期末考试评卷完成后,A老师需要划出及格线,要求如下: (1) 及格线是10的倍数; (2) 保证至少有60%的学生及格; (3) 如果所有的学生都高于60分,则及格线为60分 输入样例:61 51 49 30 20 10 70 80 90 99 输出样例:50 */ public class Main { private static Scanner input; public static void main(String[] args){ int a[]=new int[10]; input = new Scanner(System.in); for(int i=0;i<10;i++){ a[i]=input.nextInt(); } Main main=new Main(); // int passline=main.getPassLine1(a); int passline=main.getPassLine2(a); System.out.print(passline); } int getPassLine1(int[] a){ int passline = 0; int b[]=new int[10];//分数分别在0-9,10-19,....,90-100范围内的人数 for(int i=0;i<a.length;i++){ int d=a[i]/10; if(d>9)b[9]++; else b[d]++; } if(b[0]==0&&b[1]==0&&b[2]==0&&b[3]==0&&b[4]==0&&b[5]==0) passline=60; else{ int count=10;//及格人数 int p=0; while(count>=6){ count=count-b[p]; p++; } passline=(--p)*10; } return passline; } int getPassLine2(int[] a){ int passline; sort(a); if(a[9]>=60){ passline=60; }else { passline=a[5]/10*10; } return passline; } void sort(int[] a ){//将a从大到小排序(冒泡排序) int p; boolean exchange=false; for(int i=0;i<a.length;i++){ exchange=false; for(int j=a.length-1;j>i;j--){ if(a[j]>a[j-1]){ exchange=true; p=a[j-1]; a[j-1]=a[j]; a[j]=p; } } if(!exchange) break; } } }
高级题:地铁换乘
已知2条地铁线路,其中A为环线,B为东西向线路,线路都是双向的。经过的站点名分别如下,两条线交叉的换乘点用T1、T2表示。编写程序,任意输入两个站点名称,输出乘坐地铁最少需要经过的车站数量(含输入的起点和终点,换乘站点只计算一次)。
地铁线A(环线)经过车站:A1
A2 A3 A4 A5 A6 A7 A8 A9 T1 A10 A11 A12 A13 T2 A14 A15 A16 A17
A18
地铁线B(直线)经过车站:B1 B2 B3 B4 B5 T1 B6 B7 B8 B9 B10 T2 B11 B12 B13 B14 B15
样例输入:A1 A3
样例输出:3
import org.omg.CORBA.INITIALIZE; /** Author : Linda Time : 2014/3/28 description : 高级题:地铁换乘 已知2条地铁线路,其中A为环线,B为东西向线路,线路都是双向的。经过的站点名分别如下,两条线交叉的换乘点用T1、T2表示。编写程序,任意输入两个站点名称,输出乘坐地铁最少需要经过的车站数量(含输入的起点和终点,换乘站点只计算一次)。 地铁线A(环线)经过车站:A1 A2 A3 A4 A5 A6 A7 A8 A9 T1 A10 A11 A12 A13 T2 A14 A15 A16 A17 A18 地铁线B(直线)经过车站:B1 B2 B3 B4 B5 T1 B6 B7 B8 B9 B10 T2 B11 B12 B13 B14 B15 样例输入:A1 A3 样例输出:3 */ public class Main { //输入两个节点,输出节点间的最短距离 public static void main(String[] args) { Scanner input=new Scanner(System.in); String pair[]=input.nextLine().split(" "); Main m=new Main(); System.out.print(m.shortestRoat(pair)); } int shortestRoat(String[] pair){ int length=0; int[] locations=string2int(pair); int[][] a=new int[35][35]; initiallize(a); floyd(a); length=a[locations[0]][locations[1]]+1;//因为计算的是路径长度,所经过的节点数为路径长度+1 return length; } //将字符串转换成其对应的位置 int[] string2int(String[] pair){ int[] l=new int[2]; String vertices[]={"A1","A2","A3","A4","A5","A6","A7","A8","A9", "T1","A10","A11","A12","A13","T2","A14","A15","A16","A17","A18", "B1","B2","B3","B4","B5","B6","B7","B8","B9","B10","B11","B12","B13","B14","B15"}; for(int i=0;i<35;i++){ if(vertices[i].equals(pair[0]))l[0]=i; if(vertices[i].equals(pair[1]))l[1]=i; } return l; } //初始化邻接矩阵 void initiallize(int[][] a){ for(int i=0;i<35;i++) for(int j=0;j<35;j++){ if(i==j)a[i][j]=0; else { a[i][j]=65535; } } for(int i=0;i<19;i++){ a[i][i+1]=a[i+1][i]=1; } a[19][0]=a[0][19]=1; for(int i=20;i<24;i++){ a[i][i+1]=a[i+1][i]=1; } a[24][9]=a[24][9]=1; a[25][9]=a[25][9]=1; for(int i=25;i<29;i++){ a[i][i+1]=a[i+1][i]=1; } a[29][14]=a[14][29]=1; a[30][14]=a[14][30]=1; for(int i=30;i<34;i++){ a[i][i+1]=a[i+1][i]=1; } } //使用Floyd算法计算去最短距离 void floyd(int[][] a){ int temp; for(int k=0;k<35;k++) for(int i=0;i<35;i++) for(int j=0;j<35;j++){ temp=a[i][k]+a[k][j]; if(a[i][j]>temp)a[i][j]=temp; } } }
原文:http://www.cnblogs.com/ITLearner-Linda/p/3631612.html