java算24点代码:输入4个数算24点,能够在命令提示符下就可以运行。100多行。
有一个简单的菜单,能够进行人机交互
import java.util.Scanner;
/** ç»å®4个æ°å计ç®24 */
public class Core {
private double expressionResult = 24;
// private int maxLine=10;
private boolean error = true;
private double numbers[] = new double[4];
public Object resultReturn;
/**
* 该对象æ¥æ3个ç§æåé expressionResult,æéç»æ maxLine,è¾åºç»ææ¯é¡µè¡æ° error,æ¯å¦åºé
* numbers[4],è®°å½ç¨æ¥è¿ç®ç4个æ°
*
* å ¶æ¬¡,该对象æ¥æ以ä¸æ¹æ³ä¾å¤é¨è°ç¨ setNumbers(double[] <è¿ç®çæ°>) è¾å ¥ç¨æ¥è¿ç®çæ°,4个æ¶æè½è®¡ç®,æ è¿å
* setMaxLine(int <è¡æ°>) è¾å ¥æ¯é¡µçè¡æ°,æ è¿å getMaxLine() è¿åæ¯é¡µçè¡æ°,ç±»å为int
* setExpressionResult(double <æéç»æ>) è¾å ¥æéç»æ,æ è¿å getExpressionResult()
* è¿åæéç»æ,ç±»å为double getExpression() è¿åå¯å¾åºæéç»æç表达å¼,ç±»å为å符串æ°ç»
*
* æå,ç§ææ¹æ³å为计ç®ä¸è¡¨è¾¾å¼è½¬æ¢é¨å
*/
// æµè¯ä½¿ç¨
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
int[] arr = new int[4];
System.out.print("è¾å ¥ç¬¬ä¸ä¸ªæ°ï¼");
arr[0] = scanner.nextInt();
System.out.print("è¾å ¥ç¬¬äºä¸ªæ°ï¼");
arr[1] = scanner.nextInt();
System.out.print("è¾å ¥ç¬¬ä¸ä¸ªæ°ï¼");
arr[2] = scanner.nextInt();
System.out.print("è¾å ¥ç¬¬å个æ°ï¼");
arr[3] = scanner.nextInt();
Core s = new Core();
s.setNumbers(arr);
String[] output = s.getExpression();
for (int i = 0; i < output.length; i++) {
System.out.println(output[i]);
}
}
/** 设å®è¢«è®¡ç®çå个æ°ï¼ç±äºæ¯æ°ç»ï¼æä»¥å ·æ容éåè½(ä¸ä¸º4个æ°) */
public void setNumbers(double[] n) {
if (n.length == 4) {
error = false;
numbers = n;
} else
error = true;
}
public void setNumbers(int[] n) {
if (n.length == 4) {
error = false;
for (int i = 0; i < 4; i++) {
numbers[i] = n[i];
}
} else
error = true;
}
/** 设å®æ¯é¡µæ¾ç¤ºçè¡æ° */
// public void setMaxLine(int n) {
// if (n>0) {
// maxLine=n;
// }
// }
// /** è¿åæ¯é¡µæ¾ç¤ºçè¡æ° */
// public int getMaxLine() {
// return maxLine;
// }
/** 设å®éè¦å¾å°çç»æ */
public void setExpressionResult(double n) {
expressionResult = n;
}
/** è¿åæéç»æ */
public double expressionResult() {
return expressionResult;
}
/** è¿å符åæ¡ä»¶çè¡¨è¾¾å¼ */
public String[] getExpression() {
if (!error) {
String[] expression = calculate(numbers);
return expression;
} else
return new String[] { "åºéäº,è¾å ¥æ误" };
}
/** cal24()ï¼è¾åºç»æ为24çè¡¨è¾¾å¼ */
private String[] calculate(double[] n) {
if (n.length != 4)
return new String[] { "Error" };
double[] n1 = new double[3];
double[] n2 = new double[2];
String[] resultString = new String[1024]; // æå¤1000ç»è§£,ææ¶æªæº¢åº
int count = 0;
boolean isRepeat = false;
for (int t1 = 0; t1 < 6; t1++) {
for (int c1 = 0; c1 < 6; c1++) {
for (int t2 = 0; t2 < 3; t2++) {
for (int c2 = 0; c2 < 6; c2++) {
for (int c3 = 0; c3 < 6; c3++) {
if ((c1 / 3 == c2 / 3 && (c1 % 3) * (c2 % 3) != 0)
|| (c2 / 3 == c3 / 3 && (c2 % 3) * (c3 % 3) != 0)
|| (c1 / 3 == c3 / 3
&& (c1 % 3) * (c3 % 3) != 0 && t2 == 2)) {
// å»é¤è¿åè¿é¤ç解,å 为x/(y/z)=x*z/y
continue;
}
n1 = cal1(n, t1, c1);
n2 = cal2(n1, t2, c2);
double result = cal(n2[0], n2[1], c3);
if ((result - expressionResult) < 0.00000001
&& (expressionResult - result) < 0.00000001) {
resultString[count] = calString(n, t1, c1, t2,
c2, c3)
+ "=" + (int) expressionResult;
for (int i = 0; i < count; i++) {
isRepeat = false;
if (resultString[i]
.equals(resultString[count])) { // å»é¤å®å ¨éå¤ç解
isRepeat = true;
break; // æåéåºå¾ªç¯
}
}
if (c1 == c2 && c2 == c3 && c1 % 3 == 0
&& t1 + t2 != 0) { // è¿å è¿ä¹
isRepeat = true;
}
if (!isRepeat) {
count++;
}
}
}
}
}
}
}
if (count == 0)
return new String[] { "该ç»æ°æ 解" };
String[] resultReturn = new String[count];
System.arraycopy(resultString, 0, resultReturn, 0, count);
return resultReturn;
}
/** cal1()ï¼å°4个æ°è®¡ç®ä¸æ¬¡åè¿å3ä¸ªæ° */
private double[] cal1(double[] n, int t, int c) { // t为åæ¥çt1ï¼c为åæ¥çc1
double[] m = new double[3];
switch (t) {
case 0:
m[1] = n[2];
m[2] = n[3];
m[0] = cal(n[0], n[1], c);
break;
case 1:
m[1] = n[1];
m[2] = n[3];
m[0] = cal(n[0], n[2], c);
break;
case 2:
m[1] = n[1];
m[2] = n[2];
m[0] = cal(n[0], n[3], c);
break;
case 3:
m[1] = n[0];
m[2] = n[3];
m[0] = cal(n[1], n[2], c);
break;
case 4:
m[1] = n[0];
m[2] = n[2];
m[0] = cal(n[1], n[3], c);
break;
default:
m[1] = n[0];
m[2] = n[1];
m[0] = cal(n[2], n[3], c);
}
return m;
}
/** cal2()ï¼å°3个æ°è®¡ç®ä¸æ¬¡åè¿å2ä¸ªæ° */
private double[] cal2(double[] n, int t, int c) { // t为åæ¥çt2ï¼c为åæ¥çc2
double[] m = new double[2];
switch (t) {
case 0:
m[1] = n[2];
m[0] = cal(n[0], n[1], c);
break;
case 1:
m[1] = n[1];
m[0] = cal(n[0], n[2], c);
break;
default:
m[1] = n[0];
m[0] = cal(n[1], n[2], c);
}
return m;
}
/** cal()ï¼å°2个æ°è®¡ç®åè¿åç»æ */
private double cal(double n1, double n2, int c) { // n1,n2为è¿ç®æ°ï¼c为è¿ç®ç±»å
switch (c) {
case 0:
return n1 + n2;
case 1:
return n1 - n2;
case 2:
return n2 - n1;
case 3:
return n1 * n2;
case 4:
if (n2 == 0)
return 9999; // 使计ç®ç»æå¿ ä¸ä¸º24
else
return n1 / n2;
default:
if (n1 == 0)
return 9999; // åä¸
else
return n2 / n1;
}
}
/** calString()ï¼è¾åºè¡¨è¾¾å¼ */
private String calString(double[] n, int t1, int c1, int t2, int c2, int c3) {
String[] nString = new String[4];
switch (t1) {
case 0:
nString[0] = calString2("" + (int) n[0], "" + (int) n[1], c1);
nString[1] = "" + (int) n[2];
nString[2] = "" + (int) n[3];
break;
case 1:
nString[0] = calString2("" + (int) n[0], "" + (int) n[2], c1);
nString[1] = "" + (int) n[1];
nString[2] = "" + (int) n[3];
break;
case 2:
nString[0] = calString2("" + (int) n[0], "" + (int) n[3], c1);
nString[1] = "" + (int) n[1];
nString[2] = "" + (int) n[2];
break;
case 3:
nString[0] = calString2("" + (int) n[1], "" + (int) n[2], c1);
nString[1] = "" + (int) n[0];
nString[2] = "" + (int) n[3];
break;
case 4:
nString[0] = calString2("" + (int) n[1], "" + (int) n[3], c1);
nString[1] = "" + (int) n[0];
nString[2] = "" + (int) n[2];
break;
default:
nString[0] = calString2("" + (int) n[2], "" + (int) n[3], c1);
nString[1] = "" + (int) n[0];
nString[2] = "" + (int) n[1];
}
if ((c2 / 3 > c1 / 3 && (t2 != 2 || c2 / 3 == c3 / 3))
|| ((c3 / 3 > c1 / 3 + c2 / 3) && t2 == 2)
|| (c3 == 1 && c1 / 3 == 0)) // ç¹å®æ åµä¸å ä¸ä¸ä¸ªæ¬å·*****************************
nString[0] = '(' + nString[0] + ')';
switch (t2) {
case 0:
nString[0] = calString2(nString[0], "" + nString[1], c2);
nString[1] = nString[2];
break;
case 1:
nString[0] = calString2(nString[0], nString[2], c2);
break;
default:
nString[3] = nString[0];
nString[0] = calString2(nString[1], nString[2], c2);
nString[1] = nString[3];
}
if (c3 / 3 > c2 / 3 || (c3 == 2 && nString[0].indexOf('+') >= 0)) // ç¹å®æ åµä¸å ä¸ä¸ä¸ªæ¬å·*****************************
nString[0] = '(' + nString[0] + ')';
return calString2(nString[0], nString[1], c3);
}
/** calString()ï¼æ ¹æ®ç¬¦å·è¾åºä¸é¨è¿ç®è¡¨è¾¾å¼ */
private String calString2(String n1, String n2, int c) {
switch (c) {
case 0:
return n1 + '+' + n2;
case 1:
return n1 + '-' + n2;
case 2:
return n2 + '-' + n1;
case 3:
return n1 + '*' + n2;
case 4:
return n1 + '/' + n2;
default:
return n2 + '/' + n1;
}
}
}
/** ç»å®4个æ°å计ç®24 */
public class Core {
private double expressionResult = 24;
// private int maxLine=10;
private boolean error = true;
private double numbers[] = new double[4];
public Object resultReturn;
/**
* 该对象æ¥æ3个ç§æåé expressionResult,æéç»æ maxLine,è¾åºç»ææ¯é¡µè¡æ° error,æ¯å¦åºé
* numbers[4],è®°å½ç¨æ¥è¿ç®ç4个æ°
*
* å ¶æ¬¡,该对象æ¥æ以ä¸æ¹æ³ä¾å¤é¨è°ç¨ setNumbers(double[] <è¿ç®çæ°>) è¾å ¥ç¨æ¥è¿ç®çæ°,4个æ¶æè½è®¡ç®,æ è¿å
* setMaxLine(int <è¡æ°>) è¾å ¥æ¯é¡µçè¡æ°,æ è¿å getMaxLine() è¿åæ¯é¡µçè¡æ°,ç±»å为int
* setExpressionResult(double <æéç»æ>) è¾å ¥æéç»æ,æ è¿å getExpressionResult()
* è¿åæéç»æ,ç±»å为double getExpression() è¿åå¯å¾åºæéç»æç表达å¼,ç±»å为å符串æ°ç»
*
* æå,ç§ææ¹æ³å为计ç®ä¸è¡¨è¾¾å¼è½¬æ¢é¨å
*/
// æµè¯ä½¿ç¨
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
int[] arr = new int[4];
System.out.print("è¾å ¥ç¬¬ä¸ä¸ªæ°ï¼");
arr[0] = scanner.nextInt();
System.out.print("è¾å ¥ç¬¬äºä¸ªæ°ï¼");
arr[1] = scanner.nextInt();
System.out.print("è¾å ¥ç¬¬ä¸ä¸ªæ°ï¼");
arr[2] = scanner.nextInt();
System.out.print("è¾å ¥ç¬¬å个æ°ï¼");
arr[3] = scanner.nextInt();
Core s = new Core();
s.setNumbers(arr);
String[] output = s.getExpression();
for (int i = 0; i < output.length; i++) {
System.out.println(output[i]);
}
}
/** 设å®è¢«è®¡ç®çå个æ°ï¼ç±äºæ¯æ°ç»ï¼æä»¥å ·æ容éåè½(ä¸ä¸º4个æ°) */
public void setNumbers(double[] n) {
if (n.length == 4) {
error = false;
numbers = n;
} else
error = true;
}
public void setNumbers(int[] n) {
if (n.length == 4) {
error = false;
for (int i = 0; i < 4; i++) {
numbers[i] = n[i];
}
} else
error = true;
}
/** 设å®æ¯é¡µæ¾ç¤ºçè¡æ° */
// public void setMaxLine(int n) {
// if (n>0) {
// maxLine=n;
// }
// }
// /** è¿åæ¯é¡µæ¾ç¤ºçè¡æ° */
// public int getMaxLine() {
// return maxLine;
// }
/** 设å®éè¦å¾å°çç»æ */
public void setExpressionResult(double n) {
expressionResult = n;
}
/** è¿åæéç»æ */
public double expressionResult() {
return expressionResult;
}
/** è¿å符åæ¡ä»¶çè¡¨è¾¾å¼ */
public String[] getExpression() {
if (!error) {
String[] expression = calculate(numbers);
return expression;
} else
return new String[] { "åºéäº,è¾å ¥æ误" };
}
/** cal24()ï¼è¾åºç»æ为24çè¡¨è¾¾å¼ */
private String[] calculate(double[] n) {
if (n.length != 4)
return new String[] { "Error" };
double[] n1 = new double[3];
double[] n2 = new double[2];
String[] resultString = new String[1024]; // æå¤1000ç»è§£,ææ¶æªæº¢åº
int count = 0;
boolean isRepeat = false;
for (int t1 = 0; t1 < 6; t1++) {
for (int c1 = 0; c1 < 6; c1++) {
for (int t2 = 0; t2 < 3; t2++) {
for (int c2 = 0; c2 < 6; c2++) {
for (int c3 = 0; c3 < 6; c3++) {
if ((c1 / 3 == c2 / 3 && (c1 % 3) * (c2 % 3) != 0)
|| (c2 / 3 == c3 / 3 && (c2 % 3) * (c3 % 3) != 0)
|| (c1 / 3 == c3 / 3
&& (c1 % 3) * (c3 % 3) != 0 && t2 == 2)) {
// å»é¤è¿åè¿é¤ç解,å 为x/(y/z)=x*z/y
continue;
}
n1 = cal1(n, t1, c1);
n2 = cal2(n1, t2, c2);
double result = cal(n2[0], n2[1], c3);
if ((result - expressionResult) < 0.00000001
&& (expressionResult - result) < 0.00000001) {
resultString[count] = calString(n, t1, c1, t2,
c2, c3)
+ "=" + (int) expressionResult;
for (int i = 0; i < count; i++) {
isRepeat = false;
if (resultString[i]
.equals(resultString[count])) { // å»é¤å®å ¨éå¤ç解
isRepeat = true;
break; // æåéåºå¾ªç¯
}
}
if (c1 == c2 && c2 == c3 && c1 % 3 == 0
&& t1 + t2 != 0) { // è¿å è¿ä¹
isRepeat = true;
}
if (!isRepeat) {
count++;
}
}
}
}
}
}
}
if (count == 0)
return new String[] { "该ç»æ°æ 解" };
String[] resultReturn = new String[count];
System.arraycopy(resultString, 0, resultReturn, 0, count);
return resultReturn;
}
/** cal1()ï¼å°4个æ°è®¡ç®ä¸æ¬¡åè¿å3ä¸ªæ° */
private double[] cal1(double[] n, int t, int c) { // t为åæ¥çt1ï¼c为åæ¥çc1
double[] m = new double[3];
switch (t) {
case 0:
m[1] = n[2];
m[2] = n[3];
m[0] = cal(n[0], n[1], c);
break;
case 1:
m[1] = n[1];
m[2] = n[3];
m[0] = cal(n[0], n[2], c);
break;
case 2:
m[1] = n[1];
m[2] = n[2];
m[0] = cal(n[0], n[3], c);
break;
case 3:
m[1] = n[0];
m[2] = n[3];
m[0] = cal(n[1], n[2], c);
break;
case 4:
m[1] = n[0];
m[2] = n[2];
m[0] = cal(n[1], n[3], c);
break;
default:
m[1] = n[0];
m[2] = n[1];
m[0] = cal(n[2], n[3], c);
}
return m;
}
/** cal2()ï¼å°3个æ°è®¡ç®ä¸æ¬¡åè¿å2ä¸ªæ° */
private double[] cal2(double[] n, int t, int c) { // t为åæ¥çt2ï¼c为åæ¥çc2
double[] m = new double[2];
switch (t) {
case 0:
m[1] = n[2];
m[0] = cal(n[0], n[1], c);
break;
case 1:
m[1] = n[1];
m[0] = cal(n[0], n[2], c);
break;
default:
m[1] = n[0];
m[0] = cal(n[1], n[2], c);
}
return m;
}
/** cal()ï¼å°2个æ°è®¡ç®åè¿åç»æ */
private double cal(double n1, double n2, int c) { // n1,n2为è¿ç®æ°ï¼c为è¿ç®ç±»å
switch (c) {
case 0:
return n1 + n2;
case 1:
return n1 - n2;
case 2:
return n2 - n1;
case 3:
return n1 * n2;
case 4:
if (n2 == 0)
return 9999; // 使计ç®ç»æå¿ ä¸ä¸º24
else
return n1 / n2;
default:
if (n1 == 0)
return 9999; // åä¸
else
return n2 / n1;
}
}
/** calString()ï¼è¾åºè¡¨è¾¾å¼ */
private String calString(double[] n, int t1, int c1, int t2, int c2, int c3) {
String[] nString = new String[4];
switch (t1) {
case 0:
nString[0] = calString2("" + (int) n[0], "" + (int) n[1], c1);
nString[1] = "" + (int) n[2];
nString[2] = "" + (int) n[3];
break;
case 1:
nString[0] = calString2("" + (int) n[0], "" + (int) n[2], c1);
nString[1] = "" + (int) n[1];
nString[2] = "" + (int) n[3];
break;
case 2:
nString[0] = calString2("" + (int) n[0], "" + (int) n[3], c1);
nString[1] = "" + (int) n[1];
nString[2] = "" + (int) n[2];
break;
case 3:
nString[0] = calString2("" + (int) n[1], "" + (int) n[2], c1);
nString[1] = "" + (int) n[0];
nString[2] = "" + (int) n[3];
break;
case 4:
nString[0] = calString2("" + (int) n[1], "" + (int) n[3], c1);
nString[1] = "" + (int) n[0];
nString[2] = "" + (int) n[2];
break;
default:
nString[0] = calString2("" + (int) n[2], "" + (int) n[3], c1);
nString[1] = "" + (int) n[0];
nString[2] = "" + (int) n[1];
}
if ((c2 / 3 > c1 / 3 && (t2 != 2 || c2 / 3 == c3 / 3))
|| ((c3 / 3 > c1 / 3 + c2 / 3) && t2 == 2)
|| (c3 == 1 && c1 / 3 == 0)) // ç¹å®æ åµä¸å ä¸ä¸ä¸ªæ¬å·*****************************
nString[0] = '(' + nString[0] + ')';
switch (t2) {
case 0:
nString[0] = calString2(nString[0], "" + nString[1], c2);
nString[1] = nString[2];
break;
case 1:
nString[0] = calString2(nString[0], nString[2], c2);
break;
default:
nString[3] = nString[0];
nString[0] = calString2(nString[1], nString[2], c2);
nString[1] = nString[3];
}
if (c3 / 3 > c2 / 3 || (c3 == 2 && nString[0].indexOf('+') >= 0)) // ç¹å®æ åµä¸å ä¸ä¸ä¸ªæ¬å·*****************************
nString[0] = '(' + nString[0] + ')';
return calString2(nString[0], nString[1], c3);
}
/** calString()ï¼æ ¹æ®ç¬¦å·è¾åºä¸é¨è¿ç®è¡¨è¾¾å¼ */
private String calString2(String n1, String n2, int c) {
switch (c) {
case 0:
return n1 + '+' + n2;
case 1:
return n1 + '-' + n2;
case 2:
return n2 + '-' + n1;
case 3:
return n1 + '*' + n2;
case 4:
return n1 + '/' + n2;
default:
return n2 + '/' + n1;
}
}
}
温馨提示:答案为网友推荐,仅供参考