当前位置:编程学习 > JAVA >>

关于一个算法设计,面试题(急)

前几天面试碰到一个面试题,题目是这样的,从1到13之间(包括1和13)随即取4个数,并判断能否通过加减乘除得到24,如果可以打印表达式。有人知道怎么解决么 --------------------编程问答-------------------- --------------------编程问答-------------------- 这得穷举发,把可能发生的方式都试一遍,然后不断的去尝试 --------------------编程问答--------------------

import java.util.Random;
public class Test {
public int [] random() {
int [] intArray =new int[4];
Random random = new Random();
for(int i=0;i<4;i++){
intArray[i] = random.nextInt(13)+1;
}
return intArray;
}

public static void main(String[] args){
Test test= new Test();
int [] intArr =test.random();
while(true){
if((intArr[0]*intArr[1]*intArr[2]*intArr[3])==24){
break;
}else{
intArr=test.random();
}
}
for(int i=0;i<4;i++){
System.out.print(intArr[i]+"\t");
}
}
}
--------------------编程问答--------------------
引用 3 楼 cycao313 的回复:
Java code

import java.util.Random;
public class Test {
    public int [] random() {
        int [] intArray =new int[4];
        Random random = new Random();
        for(int i=0;i<4;i++){
  ……



我表示你没有理解楼主的意思吧
你这只是一种 还有很多种呢 --------------------编程问答-------------------- 想起小时候玩的智力纸牌游戏“24点”,规则和这一模一样... --------------------编程问答--------------------
引用 4 楼 zxclovedsy 的回复:
引用 3 楼 cycao313 的回复:
Java code

import java.util.Random;
public class Test {
public int [] random() {
int [] intArray =new int[4];
Random random = new Random();
for(int i=0;i<4;i++){
……


……


程序的写法固有很多种,
本题的思路也有很多种?你既然知道,为何不例出几个来?也可以供我们学习,不要自己有就藏着。 --------------------编程问答-------------------- package com;

import java.util.Arrays;
import java.util.Scanner;

public class Compare {
Scanner in = new Scanner(System.in);
public static int z = 0;
public static int expectedValue;
public static int a;
public static int b;
public static int c;
public static int d;

public static void main(String[] args) {
Scanner in = new Scanner(System.in);
System.out.println("请输入四个数字...");
a = in.nextInt();
b = in.nextInt();
c = in.nextInt();
d = in.nextInt();
System.out.println("请输入期望值...");
expectedValue = in.nextInt();
System.out.println("四个数字是:" + a + "," + b + "," + c + "," + d
+ "..期望值是:expectedValue=" + expectedValue);
int[] array = { a, b, c, d };
Arrays.sort(array);
StringBuffer buffer = new StringBuffer();
for (int o = 0; o < array.length; o++) {
a = array[o];
for (int p = 0; p < array.length; p++) {
if (p != o) {
b = array[p];

for (int q = 0; q < array.length; q++) {
if (q != o && q != p) {
c = array[q];
for (int index = 0; index < array.length; index++) {
if (index != o && index != p && index != q) {
d = array[index];
for (double i = 0; i < 2; i++) {
if (i == 0) {
for (double j = 0; j < array.length; j++) {
for (double k = 0; k < array.length; k++) {
fun(oper(a, b, j), arith(c,
d, k), j, k, buffer);
}
}
}
if (i == 1) {
for (int j = 0; j < array.length; j++) {
for (int k = 0; k < array.length; k++) {
double sum = arith(oper(a,
b, j), c, k);
func(sum, d, j, k, buffer);
}
}
}
}
}
}
}
}
}
}
}

}

private static void func(double i, double j, int j2, int k2,
StringBuffer buffer) {
String str = "";
String str1 = "";
if (j2 == 0) {
str = "+";
} else if (j2 == 1) {
str = "-";
} else if (j2 == 2) {
str = "*";
} else {
str = "/";
}
if (k2 == 0) {
str1 = "+";
} else if (k2 == 1) {
str1 = "-";
} else if (k2 == 2) {
str1 = "*";
} else {
str1 = "/";
}
for (double k = 0; k < 4; k++) {
if (k == 0) {
if ((i + j) == expectedValue) {
String bb = "[(" + a + str + b + ")" + str1 + c + "]" + "+"
+ d + "=" + expectedValue;
if (buffer.indexOf(bb) == -1) {
System.out.println(bb);
buffer.append(bb);
}
}
}
if (k == 1) {
if ((i - j) == expectedValue) {
String bb = "[(" + a + str + b + ")" + str1 + c + "]" + "-"
+ d + "=" + expectedValue;
if (buffer.indexOf(bb) == -1) {
System.out.println(bb);
buffer.append(bb);
}
}
}

if (k == 2) {
if ((i * j) == expectedValue) {
String bb = "[(" + a + str + b + ")" + str1 + c + "]" + "*"
+ d + "=" + expectedValue;
if (buffer.indexOf(bb) == -1) {
System.out.println(bb);
buffer.append(bb);
}
}
}
if (k == 3) {
if ((i / j) == expectedValue) {
String bb = "[(" + a + str + b + ")" + str1 + c + "]" + "/"
+ d + "=" + expectedValue;
if (buffer.indexOf(bb) == -1) {
System.out.println(bb);
buffer.append(bb);
}
}
}
}
}

private static void fun(double i, double j, double j2, double k2,
StringBuffer buffer) {
String str = "";
String str1 = "";
if (j2 == 0) {
str = "+";
} else if (j2 == 1) {
str = "-";
} else if (j2 == 2) {
str = "*";
} else {
str = "/";
}
if (k2 == 0) {
str1 = "+";
} else if (k2 == 1) {
str1 = "-";
} else if (k2 == 2) {
str1 = "*";
} else {
str1 = "/";
}
for (double k = 0; k < 4; k++) {
if (k == 0) {
if ((i + j) == expectedValue) {
String bb = "(" + a + str + b + ")+(" + c + str1 + d + ")="
+ expectedValue;
if (buffer.indexOf(bb) == -1) {
System.out.println(bb);
buffer.append(bb);
}
}
}
if (k == 1) {
if ((i - j) == expectedValue) {
String bb = "(" + a + str + b + ")-(" + c + str1 + d + ")="
+ expectedValue;
if (buffer.indexOf(bb) == -1) {
System.out.println(bb);
buffer.append(bb);
}
}
}

if (k == 2) {
if ((i * j) == expectedValue) {
String bb = "(" + a + str + b + ")*(" + c + str1 + d + ")="
+ expectedValue;
if (buffer.indexOf(bb) == -1) {
System.out.println(bb);
buffer.append(bb);
}
}
}
if (k == 3) {
if ((i / j) == expectedValue) {
String bb = "(" + a + str + b + ")/(" + c + str1 + d + ")="
+ expectedValue;
if (buffer.indexOf(bb) == -1) {
System.out.println(bb);
buffer.append(bb);
}
}
}
}
}

public static double oper(double a, double b, double j) {
double z = 0;
if (j == 0) {
z = a + b;
} else if (j == 1) {
z = a - b;
} else if (j == 2) {
z = a * b;
} else if (j == 3) {
z = a / b;
}
return z;
}

public static double arith(double c, double d, double k) {
double z = 0;
if (k == 0) {
z = c + d;
} else if (k == 1) {
z = c - d;
} else if (k == 2) {
z = c * d;
} else if (k == 3) {
z = c / d;
}
return z;
}
}

直接可以运行的!!! --------------------编程问答-------------------- --------------------编程问答--------------------
补充:Java ,  Java SE
CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,