靓机街测评华为(牛客网华为机试)
直接gcd解决#include<iostream> using namespace std;,下面我们就来说一说关于靓机街测评华为?我们一起去了解并探讨一下这个问题吧!
靓机街测评华为
(牛客网)华为机试题集解答
第一题 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); } }
机会都是留给有准备的人
需要完整的Java资料可以私信我回复【Java】
,免责声明:本文仅代表文章作者的个人观点,与本站无关。其原创性、真实性以及文中陈述文字和内容未经本站证实,对本文以及其中全部或者部分内容文字的真实性、完整性和原创性本站不作任何保证或承诺,请读者仅作参考,并自行核实相关内容。文章投诉邮箱:anhduc.ph@yahoo.com