华为编程题之一:等式变换
2015-02-09 18:52
155 查看
等式变换
描述: 输入一个正整数X,在下面的等式左边的数字之间添加+号或者-号,使得等式成立。
1 2 3 4 5 6 7 8 9 = X
比如:
12-34+5-67+89 = 5
1+23+4-5+6-7-8-9 = 5
请编写程序,统计满足该输入整数的所有等式的个数。
运行时间限制: 无限制
内存限制: 无限制
输入: 正整数,等式右边的数字
输出: 使该等式成立的个数
样例输入: 5
样例输出: 21
答案提示:
代码:
描述: 输入一个正整数X,在下面的等式左边的数字之间添加+号或者-号,使得等式成立。
1 2 3 4 5 6 7 8 9 = X
比如:
12-34+5-67+89 = 5
1+23+4-5+6-7-8-9 = 5
请编写程序,统计满足该输入整数的所有等式的个数。
运行时间限制: 无限制
内存限制: 无限制
输入: 正整数,等式右边的数字
输出: 使该等式成立的个数
样例输入: 5
样例输出: 21
答案提示:
代码:
import java.io.IOException; import java.io.InputStreamReader; import java.io.BufferedReader; import java.util.ArrayList; public class Calculation{ public static void main(String[] args)throws IOException{ InputStreamReader in = new InputStreamReader(System.in); BufferedReader br = new BufferedReader(in); String str = null; System.out.println("enter your string:"); str = br.readLine(); int x=Integer.parseInt(str); System.out.println(x+""); int numberResult = count(x); System.out.println(numberResult+""); } public static int count(int x){ String[] ops = {"+","-",""}; String express =""; int result = 0; int number =0; int count =0; ArrayList<String> expressList = new ArrayList<String>(); for(int i1=0;i1<3;i1++){ for(int i2=0;i2<3;i2++){ for(int i3=0;i3<3;i3++){ for(int i4=0;i4<3;i4++){ for(int i5=0;i5<3;i5++){ for(int i6=0;i6<3;i6++){ for(int i7=0;i7<3;i7++){ for(int i8=0;i8<3;i8++){ express = 1 + ops[i1] + 2 + ops[i2]+3+ops[i3]+4+ops[i4]+5+ops[i5]+6+ops[i6]+7+ops[i7]+8+ops[i8]+9; System.out.println(express); count++; result = calculate(express); if(result == x){ number++; expressList.add(express); } } } } } } } } } System.out.println(count+""); for(String ex:expressList){ System.out.println(ex); } return number; } public static int calculate(String express){ ArrayList<Integer> numList = new ArrayList<Integer>(); ArrayList<Character> opsList = new ArrayList<Character>(); String[] nums1 = express.split("\\+"); for(String s:nums1){ String[] nums2 = s.split("-"); for(String s1:nums2){ int n=Integer.parseInt(s1); numList.add(n); } } for(int n : numList){ System.out.println(n+""); } for(int i=0;i<express.length();i++){ char cOps =express.charAt(i); if(cOps == '+' || cOps == '-'){ opsList.add(cOps); } } for(char c:opsList){ System.out.println(c); } int sum = numList.get(0); for(int j =0;j<opsList.size();j++){ char cOps = opsList.get(j); if(cOps == '+'){ sum = sum + numList.get(j+1); }else if(cOps == '-'){ sum = sum - numList.get(j+1); } } System.out.println(sum); return sum; } }
相关文章推荐
- 2014华为校园招聘机试题 等式变换
- 2015年华为校招机试题和代码实现(分解字符串,拼音转数字,去除重复字符并排序,等式变换)
- 等式变换(2015届华为校园招聘机试题第三题 )
- 华为2014机试题-等式变换
- 华为校招一道上机题:等式变换
- 2015届华为校园招聘机试题<第三题等式变换>
- 华为机试等式变换
- 华为上机题:等式变换
- 华为2015机试 最后一题 等式变换
- 华为机试题 等式变换
- [华为机试真题][2014]63.等式变换
- 2015届华为机试等式变换
- 2013华为笔试上机题 等式变换
- [华为机试真题][2014]63.等式变换
- 华为编程题:字符串排序
- 华为编程题之六:计算最后一个出列者的编号
- 华为2016研发工程师编程题---删数
- 【编程习题★★★☆☆】等式变换求解
- 整型数组处理算法(八)插入(+、-、空格)完成的等式:1 2 3 4 5 6 7 8 9=N[华为面试题]
- 华为[编程题]最高分是多少