第一题:
题目描述:
对于分数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}; } }
第二题是什么牛额,应该时动态规划,没来得及看
全部评论
(5) 回帖