JAVA 面试题(二)
JAVA 面试题
Java-面试-逻辑题
Java-面试-逻辑题(二)
问题一
实现一个函数,参数为n,返回1*(1+2)…(1+2+…+n)的值;
代码实现
public static int sum(int n) {
int Sumval = 1;
int Count = 0;
for (int i = 1; i <= n; i++) {
Count += i;
Sumval *= Count;
}
return Sumval;
}
测试和输出结果
public static void main(String[] args) {
// TODO Auto-generated method stub
System.out.println(sum(5));
}
问题二
假设有两个未知整数x,y,它们相加等于n,相乘等于m,-10000<n,m<10000。请实现一个函数,输入n,m,如果存在x和y则返回true,不存在x和y则返回false。例如n=5,m=4,相乘等于4的x、y分别为1和4,返回true。
代码实现
static boolean Cheak_Number(int n, int m) {
if ((-10000 < n) && (n < 10000) && (-10000 < m) && (m < 10000)) {
long t = n * n - 4 * m;
if (t >= 0) {
//System.out.println("x1 = " + ((n + Math.sqrt(t)) / 2));
//System.out.println("x2 = " + ((n - Math.sqrt(t)) / 2));
return true;
} else {
return false;
}
} else {
return false;
}
}
测试和输出结果
public static void main(String[] args) {
// TODO Auto-generated method stub
System.out.println(Cheak_Number(5,4));
}
问题三
代码实现
实现一个函数,参数为字符串a和b,字符串是分数格式,如1/4,返回a+b的和的分数格式字符串,例如:参数为11/8和3/4时,返回17/8;
public static String getSum(String s1, String s2) {
String[] arr1 = new String[2];
arr1 = s1.split("/");
int a = Integer.parseInt(arr1[0]);
int b = Integer.parseInt(arr1[1]);
String[] arr2 = new String[2];
arr2 = s2.split("/");
int c = Integer.parseInt(arr2[0]);
int d = Integer.parseInt(arr2[1]);
int fm = lcm(b, d);
int fz = (a * lcm(b, d) / b) + (c * lcm(b, d) / d);
int n = gcd(fz, fm);
String s = fz / n + "/" + fm / n;
return s;
}
// 最小公倍数
public static int lcm(int a, int b) {
if (a < b) {
int temp = a;
b = temp;
}
int i = 1;
for (; i <= b; i++) {
if (a * i % b == 0) {
return a * i;
}
}
return a * i;
}
// 最大公约数
public static int gcd(int a, int b) {
if (a < b) {
int temp = a;
a = b;
b = temp;
}
return (a % b == 0 ? b : gcd(a % b, b));
}
测试和输出结果
public static void main(String[] args) {
// TODO Auto-generated method stub
System.out.println(getSum("11/8", "3/4"));
}