您的位置:首页 > 编程语言

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

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

答案提示:

代码:

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;

}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: