赞
踩
资源限制
时间限制:1.0s 内存限制:256.0MB
问题描述
24点游戏是一个非常有意思的游戏,很流行,玩法很简单:给你4张牌,每张牌上有数字(其中A代表1,J代表11,Q代表12,K代表13),你可以利用数学中的加、减、乘、除以及括号想办法得到24,例如:
((A*K)-J)*Q等价于((1*13)-11)*12=24
加减乘不用多说了,但除法必须满足能整除才能除!这样有一些是得不到24点的,所以这里只要求求出不超过24的最大值。
输入格式
输入第一行N(1<=N<=5)表示有N组测试数据。每组测试数据输入4行,每行一个整数(1到13)表示牌值。
输出格式
每组测试数据输出一个整数,表示所能得到的最大的不超过24的值。
样例输入
3
3
3
3
3
1
1
1
1
12
5
13
1
样例输出
24
4
21
- import java.util.Scanner;
-
-
- public class Main {
- static char[]fuhao= {'-','*','+','/'};
- public static void main(String[] args) {
- // TODO 自动生成的方法存根
- Scanner s=new Scanner(System.in);
- int n=s.nextInt();
- int []shujv=new int[4*n];
- for(int i=0;i<4*n;i++)
- shujv[i]=s.nextInt();
- int zuhe[]=new int[4];
- for(int i=0;i<n;i++) {
- zuhe[0]=shujv[i*4+0];zuhe[1]=shujv[i*4+1];
- zuhe[2]=shujv[i*4+2];zuhe[3]=shujv[i*4+3];
- z(zuhe);
- }
- }
- public static void z(int []zuhe) {
- int jieg=0;
- for(int i=0;i<4;i++) {
- for(int j=0;j<4;j++) {
- if(j==i)
- continue;
- for(int k=0;k<4;k++) {
- if(k==i||k==j)
- continue;
- for(int o=0;o<4;o++) {
- if(o==i||o==j||o==k)
- continue;
- int new_zuhe[]=new int[4];
- new_zuhe[0]=zuhe[i];new_zuhe[1]=zuhe[j];
- new_zuhe[2]=zuhe[k];new_zuhe[3]=zuhe[o];
- for(int ii=0;ii<4;ii++) {
- for(int jj=0;jj<4;jj++) {
- for(int kk=0;kk<4;kk++) {
-
- int gg=jisuan(jisuan(new_zuhe[0], new_zuhe[1], fuhao[ii]), jisuan(new_zuhe[2], new_zuhe[3], fuhao[kk]), fuhao[jj]);
- int g=jisuan(jisuan(jisuan(new_zuhe[0], new_zuhe[1], fuhao[ii]),new_zuhe[2],fuhao[jj]),new_zuhe[3],fuhao[kk]);
- if(g==24||gg==24) {
- System.out.println(24);
- return;
- }
- if(g>24&&gg>24)
- continue;
- if(g<0)
- g=-g;
- if(gg<0)
- gg=-gg;
- if(g<24) {
- if(g>jieg)
- jieg=g;
- }
- if(gg<24){
- if(gg>jieg)
- jieg=gg;
- }
- }
- }
- }
- }
- }
- }
- }
- System.out.println(jieg);
- }
- public static int jisuan(int a,int b,char c) {
- if(b==0)
- return 999999;
- if(c=='*')
- return a*b;
- if(c=='+')
- return a+b;
- if(c=='-')
- return a-b;
- else {
- if(a%b!=0)
- return 999999;
- else
- return a/b;
- }
-
- }
- }
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。