迅雷笔试编程题-求解一元方程的解
有没有谁有比较清晰的思路或者简洁的做法呀?我的思路就是分成两个字符串,统计左边字符串中 x的系数和、数字和,再统计右边的,最后再把x放一边,数字放另一边,得到答案。
import java.util.Scanner; public class Main1 { public static void main(String[] args) { Scanner in = new Scanner(System.in); System.out.print(solveEquation(in.nextLine())); } public static String solveEquation(String equation){ String[] strings = equation.split("="); String left = strings[0]; String right = strings[1]; int xLeftSum = getXSum(left); int xRightSum = getXSum(right); int leftSum = getSum(left); int rightSum = getSum(right); int xSum = xLeftSum - xRightSum; int sum = rightSum-leftSum; if (xSum == 0 && sum!=0){ return "No solution"; } else if(xSum == 0 && sum == 0){ return "Infinite solutions"; } else { int res = sum/xSum; return "x="+res; } } public static int getXSum(String str){ int xSum = 0; for (int i=0; i<str.length(); i++){ if (str.charAt(i) == 'x'){ if (i-1 < 0){ xSum++; } else { if (str.charAt(i-1) == '-'){ xSum--; } else if (str.charAt(i-1) == '+'){ xSum++; } else if (isDigit(str.charAt(i-1))){ if (i-2 < 0 || str.charAt(i-2) == '+'){ xSum += (str.charAt(i-1) - '0'); }else if (str.charAt(i-2) == '-'){ xSum -= (str.charAt(i-1) - '0'); } } } } } return xSum; } public static int getSum(String str){ int sum = 0; for (int i=0; i<str.length(); i++){ if (isDigit(str.charAt(i))){ if (i+1 >= str.length()){ if (i-1 < 0 ||str.charAt(i-1) == '+'){ sum += (str.charAt(i) - '0'); } else { sum -= (str.charAt(i) - '0'); } } else { if (str.charAt(i+1) == 'x'){ continue; } else { if (str.charAt(i-1) == '+'){ sum += (str.charAt(i) - '0'); } else { sum -= (str.charAt(i) - '0'); } } } } } return sum; } public static boolean isDigit(char ch){ return ch>='0' && ch<='9'; } }
我做的太麻烦,最后时间也不够了,只通过了一部分,交卷了自己才改正,也不知道对不对。感觉还是自己太渣。
第二道题我直接暴力递归
ac代码:
import java.util.*; public class Main { public static void main(String[] args) { Scanner in = new Scanner(System.in); n = in.nextInt(); int m = in.nextInt(); getAns(m, 0); System.out.println(ans); } private static int ans = 0; private static int n; public static void getAns(int leftN, int lastNum) { if (leftN == 0){ ans++; return; } if (leftN <= lastNum) return; for (int i=lastNum+1; i<=leftN && i<=n; i++){ getAns(leftN-i, i); } } }
#迅雷#