华为编程题之一:等式变换

等式变换
描述:    输入一个正整数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;
		
	}
}


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值