招商银行4/8第二题
首先测试样例的确给的挺坑的,第一位前面不能加符号,每两位数字间可以加符号或者不加,很多人0%的应该就是这问题
Java写的,回溯法,用一个数组来存每一位前面加符号的状态,再记下当前到第几位了。
#招商银行##笔试题目#
Java写的,回溯法,用一个数组来存每一位前面加符号的状态,再记下当前到第几位了。
把所有加符号状态都遍历出来(其实就是暴力),到最后一位的时候,也就是得到一种完整情况后,就去计算当前这一加符号状态得到的结果。
public class Problem2 { static int ans; static String str; static int tar; public static void main(String[] args) { Scanner sc = new Scanner(System.in); int T = sc.nextInt(); while(T-->0) { str = sc.next(); tar = sc.nextInt(); ans = 0; recur(new int[str.length()], 1); // System.out.println("ans:" + ans); System.out.println(ans); } } private static void recur(int[] op, int pos) { if(pos == str.length()) { if(tar == checkOp(op)) { ans++; } return; } for(int i = 1; i <= 3; i++) { op[pos] = i; recur(op, pos+1); op[pos] = 0; } return; } /* 1不操作 2加好 3减号 */ private static int checkOp(int[] op) { // if(op[0] != 1) // return tar-1; StringBuilder sb = new StringBuilder(); sb.append(str.charAt(0)); for (int i = 1; i < op.length; i++) { if(op[i] == 1) { sb.append(str.charAt(i)); } else if( op[i] == 2) { sb.append('+').append(str.charAt(i)); } else if( op[i] == 3) { sb.append('-').append(str.charAt(i)); } } String s = sb.toString(); int sum = 0; int *** = 1; for(int i = 0; i < s.length(); i++) { if(s.charAt(i)=='+') { *** = 1; } else if(s.charAt(i) == '-') { *** = -1; } else{ int cur = 0; int x = i; while(x < s.length() && s.charAt(x) != '+' && s.charAt(x) != '-') { cur = cur*10 + (s.charAt(x) - '0' ); x++; } sum += cur****; i = x-1; } } // System.out.println(s + "=" + sum); return sum; } }菜鸡第一次AC两题,发个帖嘚瑟一下/cy