2021/7/22 阿里笔试题
第一题:
题目描述:
对于分数Xi / Yi ,我们给T组数据,n表示每组数据有n个分数,让这些分数相加看是否能等于一个整数,如果相加为整数返回Yes,否则返回No。
用例数据:
2 3 1 2 1 3 1 6 4 2 3 4 6 2 6 3 8 Yes No
我的思路是从头到尾两两合并,合并到最后看分子和分母如果相等就为Yes。
合并的话,要求分母的最小公倍数(可我不会求,菜狗啊!!!),然后合并
下面是我的代码,我本地调试没问题,但是保存运行他总说我超出边界,zero/0,是除数为零了?还是超出边界了?不知道啊。
下面是菜狗的没成功的代码:
import java.util.Scanner;
/**
* @author keboom
* @date 2021/7/21
*/
public class Main {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int T = sc.nextInt();
String[] result = new String[T];
for (int i = 0; i < T; i++) {
int n = sc.nextInt();
int[] x = new int[n];
int[] y = new int[n];
for (int j = 0; j < n; j++) {
x[j] = sc.nextInt();
y[j] = sc.nextInt();
if (x[j] == 0) {
result[i] = "Yes";
break;
}
}
boolean res = sum(x, y);
if (res) {
result[i] = "Yes";
} else {
result[i] = "No";
}
}
for (int i = 0; i < T; i++) {
System.out.println(result[i]);
}
}
public static boolean sum(int[] x, int[] y){
int[] res = {x[0],y[0]};
for (int i = 1; i < x.length; i++) {
int[] merge = merge(res[0], res[1], x[i], y[i]);
res[0] = merge[0];
res[1] = merge[1];
}
if (res[0] == res[1]) {
return true;
} else {
return false;
}
}
public static int[] merge(int x1, int y1,int x2,int y2) {
int mu = 1;
if (y2 % y1 == 0) {
mu = y2;
x1 = y2/y1 * x1;
} else {
mu = y1 * y2;
x1 = y2 * x1;
x2 = y1 * x2;
}
int x = x1 + x2;
return new int[]{x, mu};
}
} 第二题是什么牛额,应该时动态规划,没来得及看
#阿里笔试##笔经##阿里巴巴#
美的集团公司福利 747人发布