当前位置: 首页 > >

武汉理工计算机考研复试上机题

发布时间:

一、2014年上机真题(专硕)

1 3 9 4 2 2

6

5-1.0-3.0*9.0-2.0+4.0+2.0




package kaoyan;

import java.io.*;

public class Practice2017{
private static double[] a; //卡牌
private static int length; //已求得的最长表达式的长度
private static String[] expression; //存储最长的运算的表达式

public static void main(String[] args) throws IOException{
a = new double[]{5,1,3,9,4,2,2}; //这里我直接输入的数据,没用文件读写
expression = new String[13];
expression[0] = "5";
count13(a,7,new String[15],0);

//如果表达式长度为0,则表示不能组成值为13的表达式,返回false,否则输出表达式
if(length != 0){
for (int i=0;i<=length;++i)
System.out.print(expression[i]);
}else
System.out.println(false);
}

//判断n是否为0
public static boolean isZero(double n){
return Math.abs(n) <= 0.00001;
}

//计算值为13的表达式,n为arr的长度,len为exp的长度
public static void count13(double arr[],int n,String[] exp,int len){
if (isZero(arr[0]-13)){
//多个值为13的表达式,选最长的
if (len > length){
length = len;
for (int i=1;i<=len;++i)
expression[i] = exp[i-1];
}
return;
}else if (n == 1) //不能找到值为13的表达式
return;

double[] b = new double[13];
for (int i=1;i //把剩下的没计算的数放到b中
int m = 1;
for (int k=1;k if (k != i)
b[m++] = arr[k];
}

int tempLen = len;
b[0] = arr[0] - arr[i];
exp[tempLen++] = "-";
exp[tempLen++] = String.valueOf(arr[i]);
count13(b,m,exp,tempLen);

tempLen = len;
b[0] = arr[0] + arr[i];
exp[tempLen++] = "+";
exp[tempLen++] = String.valueOf(arr[i]);
count13(b,m,exp,tempLen);

tempLen = len;
b[0] = arr[0] * arr[i];
exp[tempLen++] = "*";
exp[tempLen++] = String.valueOf(arr[i]);
count13(b,m,exp,tempLen);


if (!isZero(arr[i])){
tempLen = len;
b[0] = arr[0] / arr[i];
exp[tempLen++] = "/";
exp[tempLen++] = String.valueOf(arr[i]);
count13(b,m,exp,tempLen);
}
}
}
}




友情链接: