一个java面试题:计算24点游戏 编程
答案:1 悬赏:0 手机版
解决时间 2021-11-13 20:07
- 提问者网友:像風在裏
- 2021-11-13 07:00
一个java面试题:计算24点游戏 编程
最佳答案
- 五星知识达人网友:西岸风
- 2021-11-13 08:05
import java.util.Random;
public class test2
{
public static void main(String[] args)
{
Random random = new Random();
int a[] = new int[4];
for(int i=0; i<4; i++)
{
a[i] = random.nextInt(13)+1;
}
for(int j=0; j<4; j++)
{
System.out.println("第" + j +"个数:" + a[j]);
}
Calcula(a);
}
public static void Calcula(int[] a)
{
int add, sub, multi, div;
add = 0;
sub = 0;
multi = 0;
div = 0;
for(int i=0; i<4; i++)
{
add = add + a[i];
sub = sub - a[i];
multi = multi * a[i];
div = div/a[i];
}
if(add==24)
{
System.out.println(a[0] + "+" + a[1] + "+" + a[2] + "+" + a[3]
+ "=" + add);
}
else if(sub==24)
{
System.out.println(a[0] + "-" + a[1] + "-" + a[2] + "-" + a[3]
+ "=" + sub);
}
else if(multi==24)
{
System.out.println(a[0] + "*" + a[1] + "*" + a[2] + "*" + a[3]
+ "=" + multi);
}
else if(div==24)
{
System.out.println(a[0] + "÷" + a[1] + "÷" + a[2] + "÷" + a[3]
+ "=" + div);
}
else
{
System.out.println("对不起,没有实现24点的数");
}
}
}
已编译通过~追问编译是没问题,逻辑上是不是有点不严谨?我刚执行了一下,其中一个输出是:
第0个数:6
第1个数:11
第2个数:1
第3个数:3
对不起,没有实现24点的数
6*(11+1)/3
可能是我没描述清楚。如果还可以有括号呢?追答唉~写了半天没写出来,不想写了,跟你说一下我的思路吧,希望对你有所帮助
假如这四个数是A,B,C,D,这四个数取出来之后就是不变的了,变的只有操作符,先假设前三个数都是加法,最后一个数会有加减乘除四个情况,然后假设B和C之间是减法,D又会有加减乘除四个情况,以此类推。等把所有的推一遍,再把A和B之间的运算符改成减法,然后按照上面的方法再推。但不能一一列举,因为太庞大了,十分麻烦。所以你得想个办法找个东西把操作符放进去,然后用for循环遍历,for循环里面还要嵌套for循环,一直嵌套到C和D的加减乘除运算。
我以上说的这些是不加括号的情况,加括号的话我认为需要把上面的代码复制三次,因为括号的位置有三个,A和B,B和C,C和D,所以需要在for循环里面在不同的地方添加括号。
public class test2
{
public static void main(String[] args)
{
Random random = new Random();
int a[] = new int[4];
for(int i=0; i<4; i++)
{
a[i] = random.nextInt(13)+1;
}
for(int j=0; j<4; j++)
{
System.out.println("第" + j +"个数:" + a[j]);
}
Calcula(a);
}
public static void Calcula(int[] a)
{
int add, sub, multi, div;
add = 0;
sub = 0;
multi = 0;
div = 0;
for(int i=0; i<4; i++)
{
add = add + a[i];
sub = sub - a[i];
multi = multi * a[i];
div = div/a[i];
}
if(add==24)
{
System.out.println(a[0] + "+" + a[1] + "+" + a[2] + "+" + a[3]
+ "=" + add);
}
else if(sub==24)
{
System.out.println(a[0] + "-" + a[1] + "-" + a[2] + "-" + a[3]
+ "=" + sub);
}
else if(multi==24)
{
System.out.println(a[0] + "*" + a[1] + "*" + a[2] + "*" + a[3]
+ "=" + multi);
}
else if(div==24)
{
System.out.println(a[0] + "÷" + a[1] + "÷" + a[2] + "÷" + a[3]
+ "=" + div);
}
else
{
System.out.println("对不起,没有实现24点的数");
}
}
}
已编译通过~追问编译是没问题,逻辑上是不是有点不严谨?我刚执行了一下,其中一个输出是:
第0个数:6
第1个数:11
第2个数:1
第3个数:3
对不起,没有实现24点的数
6*(11+1)/3
可能是我没描述清楚。如果还可以有括号呢?追答唉~写了半天没写出来,不想写了,跟你说一下我的思路吧,希望对你有所帮助
假如这四个数是A,B,C,D,这四个数取出来之后就是不变的了,变的只有操作符,先假设前三个数都是加法,最后一个数会有加减乘除四个情况,然后假设B和C之间是减法,D又会有加减乘除四个情况,以此类推。等把所有的推一遍,再把A和B之间的运算符改成减法,然后按照上面的方法再推。但不能一一列举,因为太庞大了,十分麻烦。所以你得想个办法找个东西把操作符放进去,然后用for循环遍历,for循环里面还要嵌套for循环,一直嵌套到C和D的加减乘除运算。
我以上说的这些是不加括号的情况,加括号的话我认为需要把上面的代码复制三次,因为括号的位置有三个,A和B,B和C,C和D,所以需要在for循环里面在不同的地方添加括号。
我要举报
如以上问答信息为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
推荐资讯