首页 > 其他 > 详细

华为机试样题

时间:2014-03-29 08:29:18      阅读:495      评论:0      收藏:0      [点我收藏+]

初级题:从考试成绩中划出及格线
10个学生考完期末考试评卷完成后,A老师需要划出及格线,要求如下:
(1) 及格线是10的倍数;
(2) 保证至少有60%的学生及格;
(3) 如果所有的学生都高于60分,则及格线为60分
输入样例:61 51 49 30 20 10 70 80 90 99
输出样例:50

bubuko.com,布布扣
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;
    }
}
}
bubuko.com,布布扣

高级题:地铁换乘
已知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

bubuko.com,布布扣
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;
                }
    }

}
bubuko.com,布布扣

华为机试样题,布布扣,bubuko.com

华为机试样题

原文:http://www.cnblogs.com/ITLearner-Linda/p/3631612.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!