西北工业大学2018年计算机保研机试题目

1.Problem1:输入三角形的三边长,判断是否能组成三角形

输入三角形的三边长,判断是否能组成三角形
    public static void JudgeTriangle(int n){
        Scanner in=new Scanner(System.in);
        double a,b,c;
        for(int i=0;i<n;i++){
            a=in.nextInt();
            b=in.nextInt();
            c=in.nextInt();
            if(a<=0||b<=0||c<=0||(a+b)<=c||(b+c)<=a||(c+a<=b)){
                System.out.println("no");
            }
            else{
                System.out.println("yes");
            }
        }
    }

2.出 NaN,有则输出两解的值(保留两位小数)。注意精度控制!

public static void CalculateSolution(double a,double b,double c){
        DecimalFormat dl=new DecimalFormat();
        String format=new String(".00");
        dl.applyPattern(format);
        double theta=Math.pow(b,2)-4*a*c;
        if(theta<0){
            System.out.println("NaN");
        }
        else if(theta==0){
            double result1;
            double result2;
            result2=result1=-(2*a/b);
            System.out.println(dl.format(result1)+" "+dl.format(result2));
        }
        else{
            double result1;
            double result2;
            result1=(-b+Math.sqrt(theta))/(2*a);
            result2=(-b-Math.sqrt(theta))/(2*a);
            System.out.println(dl.format(result1)+" "+dl.format(result2));
        }
    }

3.Problem3:输入几组整数(先输入要输入的数据组数,再输入每组数据个数,其次输入数据),从小到大排序输出。

 public static void SortNum(int [][]a){  //排序问题
        for(int i=0;i<a.length;i++){
            Arrays.sort(a[i]);
        }
        for(int i=0;i<a.length;i++){
            for(int j=0;j<a[i].length;j++){
                System.out.print(a[i][j]+" ");
            }
            System.out.println();
        }
    }

4.Problem4:时差问题。一个地方和北京相差17个小时(比北京慢17h),输入北京时间,输出当地时间;输入格式:年 月 日 时 分,输出格式一样。此题注意输出格式控制(后四项数字位数为两位)

public static Boolean isLeafYear(int year){
        if(year%4==0&&year%100!=0 || year%400==0){
            return true;
        }
        else{
            return false;
        }
    }
    
public static void CalculateNowTime(){
        Scanner in=new Scanner(System.in);
        int yearB,monthB,dayB,hourB,minB;
        int yearN=0,monthN=0,dayN=0,hourN=0,minN=0;
        yearB=in.nextInt();
        monthB=in.nextInt();
        dayB=in.nextInt();
        hourB=in.nextInt();
        minB=in.nextInt();
        minN=minB;
        if(hourB>=17){
            hourN=hourB-17;
            dayN=dayB;
            monthN=monthB;
            yearN=yearB;
        }
        else{
            hourN=hourB-17+24;
            if(dayB>1){
                dayN=dayB-1;
                monthN=monthB;
                yearN=yearB;
            }
            else{
                Boolean IsLeafYear=isLeafYear(yearB);
                if(monthB==2||monthB==4||monthB==6||monthB==8||monthB==9||monthB==11){
                    monthN=monthB-1;
                    dayN=31;
                    yearN=yearB;
                }
                else if(monthB==5||monthB==7||monthB==10||monthB==11){
                    monthN=monthB-1;
                    dayN=30;
                    yearN=yearB;
                }
                else if(monthB==3){
                    monthN=monthB-1;
                    yearN=yearB;
                    if(IsLeafYear){
                        dayN=29;
                    }
                    else{
                        dayN=28;
                    }
                }
                else if(monthB==1){
                    yearN=yearB-1;
                    monthN=12;
                    dayN=31;
                }
            }
        }
        DecimalFormat dl=new DecimalFormat();
        String format=new String("00");
        dl.applyPattern(format);
        System.out.println(dl.format(yearN)+" "+dl.format(monthN)+" "+dl.format(dayN)+" "+dl.format(hourN)+" "+dl.format(minN));
    }

5.Problem5:算数表达式求值(算是最难的一题了),输入算数表达式(可含小数,不含括号),输出计算数值(整数直接输出整型,小数保留两位小数)。

static int Calculate[][]=new int[][]{{1,1,0,0},{1,1,0,0},{1,1,1,1,},{1,1,1,1}};
 
static int Location(char opera){
        if(opera=='+'){
            return 0;
        }
        else if(opera=='-'){
            return 1;
        }
        else if(opera=='*'){
            return 2;
        }
        else{
            return 3;
        }
    }

    static boolean Comp(char opera1,char opera2){
        int x,y;
        x=Location(opera1);
        y=Location(opera2);
        if(Calculate[x][y]==1){
            return true;
        }
        else{
            return false;
        }
    }

    public static double CalculateResult(double num1,double num2,char opera){
        if(opera=='+'){
            return num1+num2;
        }
        else if(opera=='-'){
            return num1-num2;
        }
        else if(opera=='*'){
            return num1*num2;
        }
        else{
            return num1/num2;
        }
    }


    public static void CalculateExpression(String expression){
        Stack<Double> stackNum=new Stack<>();
        Stack<Character> stackOpera=new Stack<>();
        StringBuffer str;
        char[] Expression=expression.toCharArray();
        int i=0;
        while(i<Expression.length){
            str=new StringBuffer();
            if(Expression[i]>='0'&&Expression[i]<='9'){
                while(i<Expression.length&&(Expression[i]>='0'&&Expression[i]<='9'||Expression[i]=='.')){
                    str.append(Expression[i++]);
                }
                stackNum.push(Double.valueOf(str.toString()));
            }
            else{
                if(stackOpera.isEmpty()){
                    stackOpera.push(Expression[i++]);
                }
                else{
                    char opera1=stackOpera.peek();
                    char opera2=Expression[i++];
                    if(Comp(opera1,opera2)){
                        stackOpera.pop();
                        double num2=stackNum.pop();
                        double num1=stackNum.pop();
                        double result=CalculateResult(num1,num2,opera1);
                        stackNum.push(result);
                    }
                    stackOpera.push(opera2);
                }
            }
        }
        while(!stackOpera.isEmpty()){
            char opera1=stackOpera.pop();
            double num2=stackNum.pop();
            double num1=stackNum.pop();
            double result=CalculateResult(num1,num2,opera1);
            stackNum.push(result);
        }
        System.out.println(stackNum.peek());
    }
  • 2
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值