算法思路:java
在數字1-9之間能夠有8個操做符,沒個操做符能夠是:空、加、減、乘、除,分別用數字0-5表示,用隨機函數生成8個操做符,計算9個操做數和8個操做符的結果,若是結果爲100(考慮乘除法帶來的偏差,偏差範圍0.01),輸出結果(去除重複,操做數用float型保證除法時數據不會丟失);算法
源碼以下:dom
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