趣味问题(1 2 3 4 5 6 7 8 9 = 110)

package Java2012大赛.test;
import org.junit.Test;
/*
 * 
 匪警请拨110,即使手机欠费也可拨通!
 为了保障社会秩序,保护人民群众生命财产安全,警察叔叔需要与罪犯斗智斗勇,因而需要经常性地进行体力训练和智力训练!
 某批警察叔叔正在进行智力训练:
 1 2 3 4 5 6 7 8 9 = 110;
 请看上边的算式,为了使等式成立,需要在数字间填入加号或者减号(可以不填,但不能填入其它符号)。之间没有填入符号的数字组合成一个数,例如:12+34+56+7-8+9 就是一种合格的填法;123+4+5+67-89 是另一个可能的答案。
 请你利用计算机的优势,帮助警察叔叔快速找到所有答案。
 每个答案占一行。形如:
 12+34+56+7-8+9
 123+4+5+67-89
 ......
 * */


public class CopyOfCopyOf趣味算式11002 {
static StringBuffer bf = new StringBuffer();
// int intArray[] = new int[] { 1, 2, 3, 4, 5, 6, 7, 8, 9 };
// static int count = 1;
static String[] stringArray = new String[] { "+", "-", "" };
static String[] strArray = new String[] { "", "0", "00", "000", "0000",
"00000", "000000", "0000000" };


public static void main(String[] args) {
int all = (int) Math.pow(3, 8);
for (int i = 0; i < all; i++) {
StringBuffer bf1 = new StringBuffer();
// Ternary3.fx(i).length()求出三进制的长度 (1~9之间最多有八个符号,小于8位的前边补0)
int a = 8 - Ternary3.fx(i).length();
bf1.append(strArray[a]);// 先补0
bf1.append(Ternary3.fx(i));// 后加上三进制数
String str = bf1.toString();// bf1得到全是8位的三进制数
char[] charArray1 = str.toCharArray();
char[] charArray2 = new char[17];// bf1得到算术表达式最多有1~9 和8个符号位共17个
StringBuffer bf2 = new StringBuffer();
for (int j = 1; j <= 9; j++) {// bf2得到算术表达式
bf2.append(j);
if (j <= 8) {// 1+2+3......+9加上运算符
int s = charArray1[j - 1] - 48;
bf2.append(stringArray[s]);
}
}


String str1 = bf2.toString();//将StringBuffer类型的运算表达式转化为String类型
char[] charArray3 = str1.toCharArray();//String类型运算表达式转化成字符数组
int length = str1.length();//运算表达式的长度
StringBuffer bf3 = new StringBuffer();
int[] intArray1 = new int[9];// 用来存储1~9
int t = 0;// t是intArray1的下标
char[] charArray4 = new char[8];// 用来存储8个运算符
int t2 = 0;// t2是charArray4的下标


// 将数字存储到int[] 数组中,将运算符存储到char[]数组中
bf3.append(charArray3[0]);// b3添加数字遇到+ -后new StringBuffer
for (int k = 1; k < length - 1; k++) {//该循环实现了数字存到int[]类型数组中 运算符存到 char[]数组中
int aa = charArray3[k] - 48;
if (aa >= 2 && a <= 9) {
bf3.append(charArray3[k]);
} else {
intArray1[t] = Integer.parseInt(bf3.toString());
t++;
charArray4[t2] = charArray3[k];
t2++;
bf3 = new StringBuffer();
}
}
bf3.append(charArray3[length - 1]);
intArray1[t] = Integer.parseInt(bf3.toString());




// for (int kk = 0; kk < t + 1; kk++)
// System.out.print(intArray1[kk] + "  ");
// System.out.println();
// for (int kk = 0; kk < t; kk++)
// System.out.print(charArray4[kk] + "  ");
// System.out.println();
//


int sum = intArray1[0];
for (int kk = 0; kk < t; kk++) {//进行求值
switch (charArray4[kk]) {
case '+':
sum = sum + intArray1[kk + 1];
break;
case '-':
sum = sum - intArray1[kk + 1];
break;


default:
break;
}
}
// System.out.println(sum);
if (sum == 110) {
System.out.println(bf2);
}


}


}
}





package Java2012大赛.test.trr;


public class Ternary3 {//将十进制数转化为3进制并返回StringBuffer类型
static StringBuffer bf = new StringBuffer();
public static StringBuffer fx(int a) {
if (a <= 2) {
bf.append(a);
StringBuffer bftemp = bf;
bf = new StringBuffer();
return bftemp.reverse();
}
while (a >= 3) {
bf.append(a % 3);
a = a / 3;
if (a > 0&&a<=2)
bf.append(a % 3);
}
StringBuffer bftemp = bf;
bf = new StringBuffer();
return bftemp.reverse();
}


}


你可能感兴趣的:(Java)