在1-9(1 2 3 4 5 6 7 8 9)中添加加减乘除或者什么都不加使结果等于100 ,穷举所有可能...

算法思路:

        在数字1-9之间可以有8个操作符,没个操作符可以是:空、加、减、乘、除,分别用数字0-5表示,用随机函数生成8个操作符,计算9个操作数和8个操作符的结果,如果结果为100(考虑乘除法带来的误差,误差范围0.01),输出结果(去除重复,操作数用float型保证除法时数据不会丢失);

 源码如下:

package test;

import java.util.ArrayList;
import java.util.List;

public class RandomCalculator {

	float num[] = { 1, 2, 3, 4, 5, 6, 7, 8, 9 };
	int a[] = new int[8];
	int size = 8;

	/**
	 * @param args
	 */
	public static void main(String[] args) {
		List<String> strs = new ArrayList<String>(); // 存储有效解
		String str; // 当前有效解
		int i;
		RandomCalculator rc;
		for (int n = 0; n < 0xFFFFFFF; n++) {
			rc = new RandomCalculator();
			// 获取操作符合
			rc.getOperator(rc.a);
			// 操作符转换表示
			str = rc.getFunStr();

			// 处理空操作符
			for (i = 0; i < rc.size; i++) {
				if (rc.a[i] == 0) {
					rc.dealOperator(i, rc.a[i]);
					i--;
				}
			}

			// 处理乘除法
			for (i = 0; i < rc.size; i++) {
				if (rc.a[i] >= 3) {
					rc.dealOperator(i, rc.a[i]);
					i--;
				}
			}

			// 处理加减法
			for (i = 0; i < rc.size; i++) {
				rc.dealOperator(i, rc.a[i]);
				i--;
			}

			if (notExist(strs, str) && 99.990 < rc.num[0] && rc.num[0] < 100.001) {
				strs.add(str); // 记录已经出现的
				System.out.print("\n" + strs.size() + ":" + str + "=100\n");
			}
		}

	}

	private static boolean notExist(List<String> strs, String str) {
		for (int i = 0; i < strs.size(); i++) {
			if (null != strs && strs.get(i).equals(str))
				return false;
		}
		return true;
	}

	// 获取操作符
	public void getOperator(int a[]) {
		// 生成八个操作符,0表示没有,1表示加,2表示减,3表示乘,4表示除
		for (int i = 0; i < 8; i++)
			 a[i] = (int)Math.floor(Math.random()*5);
//			a[i] = (int) Math.floor(Math.random() * 4) + 1; // 不包含空操作符的情况
	}

	// 处理操作符
	public void dealOperator(int n, int i) {
		switch (i) {
		case 0: // 无符号
			num[n] = num[n] * 10 + num[n + 1];
			break;
		case 1: // 加法
			num[n] += num[n + 1];
			break;
		case 2: // 减法
			num[n] -= num[n + 1];
			break;
		case 3: // 乘法
			num[n] *= num[n + 1];
			break;
		case 4: // 除法
			num[n] /= num[n + 1];
			break;
		default:
			break;
		}
		for (int j = n + 1; j < size; j++) {
			num[j] = num[j + 1];
			a[j - 1] = a[j];
		}
		size--;
	}

	public String getFunStr() {
		String str = "";
		int i;
		for (i = 0; i < size; i++) {
			switch (a[i]) {
			case 0:
				str += (int) num[i];
				break;
			case 1:
				str += (int) num[i] + "+";
				break;
			case 2:
				str += (int) num[i] + "-";
				break;
			case 3:
				str += (int) num[i] + "*";
				break;
			case 4:
				str += (int) num[i] + "/";
				break;
			}
		}
		str += (int) num[i];
		return str;
	}

}

结果如下:

1:1*234+5-67-8*9=100
2:1*2*3-4+5+6+78+9=100
3:1*23+4+5+67-8+9=100
4:1-23+4*5+6+7+89=100
5:1-2-34+56+7+8*9=100
6:1/2*3/4*56+7+8*9=100
7:1/2*34-5+6-7+89=100
8:1+23*4-5+6+7+8-9=100
9:123+45-67+8-9=100
10:12/3+4*5*6-7-8-9=100
11:1*2*3*4+5+6+7*8+9=100
12:1-2+3*4+5+67+8+9=100
13:12*3-4-5-6+7+8*9=100
14:1+2+3-45+67+8*9=100
15:12+3+4-56/7+89=100
16:1+2*3*4*5/6+7+8*9=100
17:1*23*4-56/7/8+9=100
18:1-2*3+4*5+6+7+8*9=100
19:1+234-56-7-8*9=100
20:12-3-4+5-6+7+89=100
21:1+2+34*5+6-7-8*9=100
22:1+23-4+56+7+8+9=100
23:1-2-3+45-6+7*8+9=100
24:12/3/4+5*6+78-9=100
25:1+2+3+4+5+6+7+8*9=100
26:1+2*3+4*5-6+7+8*9=100
27:1+234*5/6-7-89=100
28:123+4*5-6*7+8-9=100
29:1+2+3*4*56/7-8+9=100
30:1-2-3+45-6-7+8*9=100
31:1/2/3*456+7+8+9=100
32:1+23*4+56/7+8-9=100
33:1+2+3-4*5+6*7+8*9=100
34:1*2*3-4*5+6*7+8*9=100
35:12+3*4-5-6+78+9=100
36:12+34-5+6*7+8+9=100
37:12-3+4*5+6+7*8+9=100
38:1*2*34+56-7-8-9=100
39:123-4-5-6-7+8-9=100
40:1+23*4+5-6+7-8+9=100
41:12+3*4+5+6-7+8*9=100
42:1+2+3*4*5/6+78+9=100
43:1*2+34-56/7+8*9=100
44:12-3-4+5*6+7*8+9=100
45:12*3-4*5+67+8+9=100
46:1*2-3+4+56/7+89=100
47:123+4-5+67-89=100
48:123-45-67+89=100
49:1*2/3+4*5/6+7+89=100
50:12+34-5-6+7*8+9=100
51:1+2-3*4+5*6+7+8*9=100
52:1-2+3+45+6+7*8-9=100
53:12+3*45+6*7-89=100
54:1*2+3-4+5*6+78-9=100
55:1-2*3-4+5*6+7+8*9=100
56:1*2*3*4+5+6-7+8*9=100
57:1*2*3-45+67+8*9=100
58:1*2+3+4*5+6+78-9=100
59:1-2+3*4*5+6*7+8-9=100
60:12-3/4/5-6/7+89=100
61:1-2*3-4-5+6*7+8*9=100
62:1+23-4+5+6+78-9=100
63:1*23+4+56/7*8+9=100
64:1*2+3+45+67-8-9=100
65:12+3+4+5-6-7+89=100
66:1+2*34-56+78+9=100
67:1*2*3+4+5+6+7+8*9=100
68:12+34-5-6-7+8*9=100
69:1*2+34+5+6*7+8+9=100
70:1+23-4-5+6+7+8*9=100
71:1*2+34+56+7-8+9=100
72:1-23-4+5*6+7+89=100
73:1*2-3+4-5+6+7+89=100
74:12-3+4*5+6-7+8*9=100
75:1*2*3*4-5-6+78+9=100
76:1+2+34-5+67-8+9=100
77:1-2-3+4*56/7+8*9=100
78:12+3*4+5+6+7*8+9=100
79:1*2-3+4*5-6+78+9=100
80:1+2+3*4-5-6+7+89=100
81:1+23-4+56/7+8*9=100
82:1-2+3*4*5-6+7*8-9=100
83:1-23-4-5+6*7+89=100
84:1+234*5*6/78+9=100
85:1*2+34+5-6-7+8*9=100
86:1+2+3-4+5+6+78+9=100
87:12*3-4+5-6+78-9=100
88:12/3+4*5-6-7+89=100
89:1+2*3-4-5+6+7+89=100
90:1-2-3+4*5+67+8+9=100
91:1*23-4-56/7+89=100
92:12+3-4+5+67+8+9=100
93:12/3+4*5*6*7/8-9=100
94:1*23-4+5-6-7+89=100
95:1-2-3+45+6*7+8+9=100
96:12+34+5*6+7+8+9=100
97:1*2+34+5-6+7*8+9=100
98:12-3-4+5*6-7+8*9=100
99:1*2+3*4+5-6+78+9=100
100:1+2*3-4+56/7+89=100
101:1+2*3+4+5+67+8+9=100
102:1+2-3*4-5+6*7+8*9=100

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 好的,以下是一个简单的计算器的代码示例,你可以在 Python 运行它: ```python # 定义法函数 def add(a, b): return a + b # 定义减法函数 def subtract(a, b): return a - b # 定义乘法函数 def multiply(a, b): return a * b # 定义除法函数 def divide(a, b): if b == 0: print("Error: 除数不能为0") else: return a / b # 主程序 while True: # 获取用户输入的运算符和数字 operator = input("请输入运算符(+, -, *, /):") num1 = float(input("请输入第一个数字:")) num2 = float(input("请输入第二个数字:")) # 根据用户输入的运算符进行相应的计算 if operator == "+": result = add(num1, num2) elif operator == "-": result = subtract(num1, num2) elif operator == "*": result = multiply(num1, num2) elif operator == "/": result = divide(num1, num2) # 输出结果 print("结果为:", result) ``` 运行该程序后,会不断循环等待用户输入运算符和数字,然后根据用户输入的运算符进行相应的计算,并输出结果。如果用户输入的是除法运算符且第二个数字为0,则会输出错误信息。 希望这个代码示例能够满足你的需求。 ### 回答2: 1. 制作一个简易计算器,包含加减乘除四则运算:为了制作一个简易计算器,我们可以使用编程语言来实现。通过创建一个计算器类,并在类添加加减乘除四个方法来完成四则运算的功能。例如,可以创建一个add方法来实现法运算,subtract方法来实现减法运算,multiply方法来实现乘法运算,divide方法来实现除法运算。 2. 能够得到正确的运算结果:为了确保计算器能够得到正确的运算结果,我们需要在代码实现正确的运算逻辑。对于法运算,我们需要将两个数相并返回结果;对于减法运算,我们需要将第一个数减去第二个数并返回结果;对于乘法运算,我们需要将两个数相乘并返回结果;对于除法运算,我们需要将第一个数除以第二个数并返回结果。在实现这些运算逻辑时,需要考虑边界情况,比如除法运算的除数为0,需要进行错误处理。 总结:通过创建一个简易计算器,并在其实现四则运算的方法,我们可以得到一个能够正确计算结果的计算器。但需要注意,在实际应用,我们还需要考虑更多的功能和异常处理,以提高计算器的稳定性和用户体验。 ### 回答3: 1. 要制作一个简易计算器,我们需要考虑以下几个方面:界面设计、运算逻辑和用户交互。 首先,界面设计。可将计算器设计为一个包含数字按钮和运算符按钮的界面,并且在屏幕上显示当前输入的数字和运算符,以及最终的计算结果。 其次,运算逻辑。需要编写代码来处理加减乘除四则运算。可以使用条件语句和循环来判断用户输入的运算符,并执行相应的运算操作。 最后,用户交互。用户可以通过点击数字按钮和运算符按钮来输入运算表达式,然后计算器会根据用户的输入进行运算,并在屏幕上显示结果。 2. 为了保证计算器能够得到正确的运算结果,可以考虑以下几个方面:输入验证、运算精度和错误处理。 首先,输入验证。计算器需要检查用户输入的表达式是否合法,例如是否包含非法字符或者除零错误。若用户输入不合法,计算器应给予相应的提示。 其次,运算精度。在进行浮点数运算时,需要考虑精度问题。可以使用合适的数学库或自定义函数来处理浮点数运算,以确保结果的准确性。 最后,错误处理。在运算过程可能会出现一些错误,例如内存溢出或计算超出范围等。为了避免程序崩溃或给用户错误的结果,可以使用异常处理来捕获这些错误,并进行相应的处理和提示。 综上所述,制作一个简易计算器包含了界面设计、运算逻辑和用户交互。为了得到正确的运算结果,需要考虑输入验证、运算精度和错误处理。通过这些步骤,我们可以实现一个能够满足基本需求的简易计算器。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值