华为这部分的机试题我是从最后开始刷的:
最小公倍数 = 两数之积除以最大公约数
最大公约数的我采用了辗转相除法和更相减损法这两种,当然也可以穷举。
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int a=sc.nextInt();
int b=sc.nextInt();
int d=getMaxCommonDivisor1(a,b);
System.out.println((a*b)/d);
}
/**
* 求最大公约数 辗转相除法
* @param m
* @param n
* @return
*/
private static int getMaxCommonDivisor(int m,int n) {
if(n<=0){
return m;
}
int b= m%n;
m=n;
n=b;
return getMaxCommonDivisor(m,n);
}
/**
* 求最大公约数 更相减损法
* @param m
* @param n
* @return
*/
private static int getMaxCommonDivisor1(int m,int n) {
if(m==n){
return m;
}
if(m>n){
m=m-n;
}
if(m
•计算一个数字的立方根,不使用库函数
详细描述:
•接口说明
原型:
public static double getCubeRoot(double input)
输入:double 待求解参数
返回值:double 输入参数的立方根,保留一位小数
输入描述:
待求解参数 double类型
输出描述:
输入参数的立方根 也是double类型
示例1
输入
216
输出
6.0
第一种方法:
牛顿迭代法。设f(x)=x3-y, 求f(x)=0时的解x,即为y的立方根。
根据牛顿迭代思想,
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
double a = sc.nextDouble();
double b= getCubeRoot(a);
System.out.printf("%.1f", b);
}
public static double getCubeRoot(double input) {
double x = 1.0;
while (Math.abs(x * x * x - input) > 1e-9)
x = x - ((x * x * x - input) / (3 * x * x));
return x;
}
}
第二种方法:
二分查找法 下面的这个写法虽然通过测试用例了,但是这个是有问题的,现在这种写法只适用与大于1的正数。
这个思想感觉还是可以的,不过需要进一步完善
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
double a = sc.nextDouble();
double b= getCubeRoot1(a);
System.out.printf("%.1f", b);
}
public static double getCubeRoot1(double input) {
double max = input;
double min = 0;
double mid = 0;
while ((max - mid) >= 0.0001) {// 注意,这里的精度要提高一点,否则某些测试用例无法通过
if (mid * mid * mid > input) {
max = mid;
}
if (mid * mid * mid < input) {
min = mid;
}
if (mid * mid * mid == input) {
return mid;
}
mid = (max + min) / 2.0;
}
return max;
}
}
连续输入字符串(输出次数为N,字符串长度小于100),请按长度为8拆分每个字符串后输出到新的字符串数组,
长度不是8整数倍的字符串请在后面补数字0,空字符串不处理。
首先输入一个整数,为要输入的字符串个数。
例如:
输入:2
abc
12345789
输出:abc00000
12345678
90000000
接口函数设计如下:
/*****************************************************************************
功能:存储输入的字符创
输入:字符串
输出:无
返回:0表示成功,其它返回-1
******************************************************************************/
int AddString(char *strValue);
/****************************************************************************
功能:获取补位后的二维数组的长度
输入:无
输出:无
返回:二维数组长度
*****************************************************************************/
int GetLength();
/*****************************************************************************
功能:将补位后的二维数组,与输入的二维数组做比较
输入:strInput:输入二维数组,iLen:输入的二维数组的长度
输出:无
返回:若相等,返回0;不相等,返回-1.其它:-1;
******************************************************************************/
int ArrCmp(char strInput[][9],int iLen);
输入描述:
首先输入数字n,表示要输入多少个字符串。连续输入字符串(输出次数为N,字符串长度小于100)。
输出描述:
按长度为8拆分每个字符串后输出到新的字符串数组,长度不是8整数倍的字符串请在后面补数字0,空字符串不处理。
示例1
输入
2
abc
123456789
输出
abc00000
12345678
90000000
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
while (sc.hasNext()){
int n= sc.nextInt();
for(int i=0;i
4、