(牛客网)华为机试(一)

   日期:2020-07-13     浏览:98    评论:0    
核心提示:华为机试解答第一题 HJ108求最小公倍数:直接gcd解决#includeusing namespace std;int gcd(int a,int b) //求最大公约数函数{ int r; while(b) { r=a%b; a=b; b=r; } return a;}int main(){ int a,b,g; while(scanf(%d%d,&a,&a

(牛客网)华为机试题集解答

第一题 HJ108求最小公倍数:

直接gcd解决

#include<iostream>
using namespace std;
int gcd(int a,int b) //求最大公约数函数
{
    int r;
    while(b)
    {
      r=a%b;
      a=b;
      b=r;
   }
   return a;
}
int main()
{
  int a,b,g;
  while(scanf("%d%d",&a,&b)!=EOF)
  {
      if(a>b)
        g=gcd(a,b);
      else
        g=gcd(b,a);
      g=(a*b)/g;
      printf("%d\n",g);
 
  }
   return 0;
}

第二题HJ107 求立方根:

思路:

使用二分查找,首先将输入的数字num与0构成一个区间,然后用(num+0)/2的三次幂与num进行比较,在这里要注意在计算机中两个数相当不意味着两个数字的每一位都相同,而是如果两个数的差值为1e-7(通常情况下)便认为相同,如果不相等便比较大小,如果小于num,则使用右边的区间再中值重复操作,若是大于num就在左边的区间同样操作直到找到满足条件的数然后按小数输出。

import java.util.Scanner;
public class Main{
    public static void main(String args[]){
        Scanner scanner = new Scanner(System.in);
       while (scanner.hasNext())
        {
            double input = scanner.nextDouble();
            double result = getCubeRoot(input);
            System.out.printf("%.1f\n", result);
        }
        scanner.close();
    }
   private static double getCubeRoot(double input){
       double min = 0;
        double max = input;
        double mid = 0;
         
        // 注意,这里的精度要提高一点,否则某些测试用例无法通过
        while ((max - min) > 1e-7)
        {
            mid = (max + min) / 2;
            if (mid * mid * mid > input)
                max = mid;
            else if (mid * mid * mid < input)
                min = mid;
            else
                return mid;
        }
        return max;
   }
}

第三题 HJ106 字符逆序:

思路:队列或栈都可以直接,或者将字符串存入数组,然后按下标从大到小输出也可以,一定要注意输入的时候空格也是字符只有遇到回车符才结束。

import java.util.*;
public class Main{
    public static void main(String args[]){
        Scanner scanner=new Scanner(System.in);
        while(scanner.hasNext()){
            String str=scanner.nextLine();
            StringBuilder sb = new StringBuilder(str);
            System.out.println(sb.reverse().toString());
        }
    }
}

第四题 HJ105 记负均正

思路:

将输入的数字全放入一个数组中,然后遍历数组,在遍历的过程中使用两个计数器分别记录数组中负数的个数和正数的个数,还有有个累加器来记录正数的数字之和,这题重要的是输出格式中均值是小数类型。

import java.util.*;
import java.io.*;
public class Main{
     public static void main(String args[]) throws Exception{
     BufferedReader bufferedreader = new BufferedReader(new InputStreamReader(System.in));
         String[] nums = bufferedreader.readLine().split(" ");
         int Num1 = 0; //记录负数的个数
         int Num2 = 0; //记录非负数的个数
         int sum = 0;
         for(int i=0;i<nums.length;i++){
             int num = Integer.parseInt(nums[i]);
             if(num<0){
                 Num1++;
             }
             else{
                 sum+=num;
                 Num2++;
             }
         }
         System.out.println(Num1);
         System.out.println(Math.round(sum*10.0/Num2)/10.0);
         
     }
}

预知后事,请听下回分解!!!!

 
打赏
 本文转载自:网络 
所有权利归属于原作者,如文章来源标示错误或侵犯了您的权利请联系微信13520258486
更多>最近资讯中心
更多>最新资讯中心
0相关评论

推荐图文
推荐资讯中心
点击排行
最新信息
新手指南
采购商服务
供应商服务
交易安全
关注我们
手机网站:
新浪微博:
微信关注:

13520258486

周一至周五 9:00-18:00
(其他时间联系在线客服)

24小时在线客服