用JAVA如何算出24点?24点的源代码,因该可以计算出4则运算24 public class Test24Point{public static void main(String[] args){int index = 0 ;int temp = 0 ;int totalSUC = 0 ;int numb[] = new int[4];//the first four numbersdouble num[][] = new double[36][3];//three numbers after calculatingdouble total[] = new double[6];//the number after three steps of calculatingdouble p[][] = new double[6][8];double q[][] = new double[3][7];//System.out.println(24658);//System.out.println(2465/108);System.out.println("\"a--b\"means\"b-a\"");System.out.println("\"a//b\"means\"b/a\"\n");/* for(int h = 0; h = 9; h)//Get the first four numbers for calculating and store into the array numb[4]; for(int i = 0; i = 9; i)for(int j = 0; j = 9; j)for(int k = 0; k = 9; k){numb[0] = h ;numb[1] = i ;numb[2] = j ;numb[3] = k ;}*/for(int i = 0 ; i4 ; i){numb = Integer.parseInt(args);}for(int i = 0; i3; i)//Get two of the four to calculate and then store the new number into the array p;for(int j = i1; j4 ; j,temp){p[temp][0] = numbnumb[j];p[temp][1] = numb - numb[j];p[temp][2] = numb[j] - numb;p[temp][3] = numb * numb[j]; if(numb[j] != 0)p[temp][4] = numb / (double)numb[j];elsep[temp][4] = 10000;if(numb != 0)p[temp][5] = numb[j] / (double)numb;elsep[temp][5] = 10000;
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; ioutput.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; i4; i) {
numbers[i] = n[i];
}
} else
error = true;
}
/** 设定每页显示的行数 */
// public void setMaxLine(int n) {
// if (n0) {
// 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; t16; t1) {
for (int c1 = 0; c16; c1) {
for (int t2 = 0; t23; t2) {
for (int c2 = 0; c26; c2) {
for (int c3 = 0; c36; 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) != 0t2 == 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; icount; i) {
isRepeat = false;
if (resultString[i]
.equals(resultString[count])) { // 去除完全重复的解
isRepeat = true;
break; // 提前退出循环
}
}
if (c1 == c2c2 == c3c1 % 3 == 0
t1t2 != 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 n1n2;
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 / 3c1 / 3(t2 != 2 || c2 / 3 == c3 / 3))
|| ((c3 / 3c1 / 3c2 / 3)t2 == 2)
|| (c3 == 1c1 / 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 / 3c2 / 3 || (c3 == 2nString[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;
}
}
}
java程序设计:算24点//这是java代码算24我自己写java代码算24的java代码算24 , 在VC里可以运行 。
#include "stdafx.h"
#includestdio.h
#includestdlib.h
static int NUMBER;
bool Game24(int const nNum, int* arr, int nLen, int nCount, char* pOperator, bool* pFlag){
if(nCount == 1){
if(*arr == nNum){
printf("((%d %c %d) %c %d) %c %d = %d\n",
arr[0],pOperator[0],arr[1],pOperator[1],arr[2],pOperator[2],arr[3],NUMBER);
if(!(*pFlag)) *pFlag = true;
}
return *pFlag;
}
for(int i = 0; i4;i){
switch(i){
case 0:
pOperator[nCount - 2] = ' ';
Game24(nNum - arr[nCount - 1], arr,nLen,nCount - 1,pOperator,pFlag);
break;
case 1:
pOperator[nCount - 2] = '-';
Game24(nNumarr[nCount - 1], arr,nLen,nCount - 1,pOperator,pFlag);
break;
case 2:
pOperator[nCount - 2] = '*';
if( arr[nCount - 1]!(nNum % arr[nCount - 1]))
Game24(nNum / arr[nCount - 1], arr,nLen,nCount - 1,pOperator,pFlag);
break;
case 3:
pOperator[nCount - 2] = '/';
if(arr[nCount - 1])
Game24(nNum * arr[nCount - 1], arr,nLen,nCount - 1,pOperator,pFlag);
break;
}
}
return *pFlag;
}
int fOperating(char pOpe, int x1, int x2){
switch(pOpe){
case ' ': return x1x2;
case '-': return x1 - x2;
case '*': return x1 * x2;
case '/': return x1 / x2;
}
}
bool fGame24(int const nNum, int* arr,char* pOperator, bool* pFlag){
int nLeft = 0,nRight = 0;
char pOpe[4] = {' ','-','*','/'};
for(int l = 0; l4;l){
if(l == 3(!arr[1] || arr[0] % arr[1])) continue;
pOperator[0] = pOpe[l];
nLeft = fOperating(pOpe[l],arr[0],arr[1]);
for(int r = 0; r4;r){
if(r == 3(!arr[3] || arr[2] % arr[3])) continue;
pOperator[2] = pOpe[r];
nRight = fOperating(pOpe[r],arr[2],arr[3]);
for(int m = 0; m4;m){
if(m == 3(!nRight || nLeft % nRight)) continue;
pOperator[1] = pOpe[m];
if(fOperating(pOpe[m],nLeft,nRight) == nNum){
printf("(%d %c %d) %c (%d %c %d)= %d\n",
arr[0],pOperator[0],arr[1],pOperator[1],arr[2],pOperator[2],arr[3],NUMBER);
if(!(*pFlag)) *pFlag = true;
}
}
}
}
return *pFlag;
}
int main(int argc, char* argv[])
{
puts("start!\nPlease input 4 numbers:");
bool* pFlag = (bool*)malloc(1);
*pFlag = false;
bool flag = 0;
int pNum[4] = {0};
int cNum[4] = {0};
int iNum[4] = {0};
char cOpe[3] = {0};
for(int i = 0; i4;i)
scanf("%d",pNum[i]);
puts("So, what number do you want:");
scanf("%d",NUMBER);
puts("************************************");
for(iNum[0] = 0; iNum[0]4;iNum[0]){
for(iNum[1] = 0; iNum[1]4;iNum[1]){
if(iNum[1] == iNum[0]) continue;
for(iNum[2] = 0; iNum[2]4;iNum[2]){
if(iNum[2] == iNum[0] || iNum[2] == iNum[1]) continue;
for(iNum[3] = 0; iNum[3]4;iNum[3]){
if(iNum[3] == iNum[0] || iNum[3] == iNum[1] || iNum[3] == iNum[2]) continue;
for(int i = 0; i4;i) cNum[i] = pNum[iNum[i]];
if(Game24(NUMBER,cNum,4,4,cOpe,pFlag)) flag = true;
if(fGame24(NUMBER,cNum,cOpe,pFlag)) flag = true;
}
}
}
}
free(pFlag);
if(!flag) printf("No way can be found.\n");
puts("************************************\nEnd!");
system("pause");
return 0;
}
【关于java代码算24的信息】java代码算24的介绍就聊到这里吧,感谢你花时间阅读本站内容,更多关于、java代码算24的信息别忘了在本站进行查找喔 。
推荐阅读
- 为什么拍摄画面抖动,为什么相机拍视频很抖
- 关于怎么选择显卡型gtx的信息
- 食品直播如何做推广,食品行业直播
- 我们该如何开发潜力游戏,怎样开发潜力
- java重画代码 java重绘
- 拍摄透体用什么道具做背景,透光体的拍摄
- 那为什么视频里的,为什么的视频短片
- 终极战斗模拟器游戏视频,终级战争模拟器
- c语言中使用fft函数的简单介绍