0-9数字随意抽出4个数字用java编程怎么能够用四则运算还有括号得到24

xuzhiyun123 2005-04-09 09:26:05
0-9数字随意抽出4个数字用java编程怎么能够用四则运算还有括号得到24 ,这个程序我实在不知道该如何写,麻烦大家帮忙,急用十分感谢
...全文
1227 62 打赏 收藏 转发到动态 举报
写回复
用AI写文章
62 条回复
切换为时间正序
请发表友善的回复…
发表回复
faen 2005-04-23
  • 打赏
  • 举报
回复
好了,改好了。输入四个数(可以为整数或者实数)
import java.util.*;
public class Suan24
{
private static HashSet<String>vs_r=new HashSet<String>();
private static String gc(double n)
{
String s=""+n;
StringBuffer t=new StringBuffer(s);
for(int i=t.length()-1;i>=0;i--)
if(t.charAt(i)=='0')
t.setCharAt(i,' ');
s=t.toString();
s=s.trim();
if(s.charAt(s.length()-1)=='.')
return s.substring(0,s.length()-1);
return s;
}
private static void f(LinkedList<Double>vi,LinkedList<String>vs)
{
if(vi.size()==1)
if(vi.get(0)==24)
{
String t=vs.get(0);
t=t.substring(1,t.length()-1);
t+="=24";
vs_r.add(new String(t));
return;
}
else return;
for(int i=0;i<vi.size();i++)
for(int j=0;j<vi.size();j++)
{
if(i==j)continue;
LinkedList<Double>vit=new LinkedList<Double>();
LinkedList<String>vst=new LinkedList<String>();
String s="";
for(int k=0;k<vi.size();k++)
if(k!=i&&k!=j)
{
vit.addLast(vi.get(k));
vst.addLast(new String(vs.get(k)));
}
vit.addLast(vi.get(i)+vi.get(j));
s="("+vs.get(i)+"+"+vs.get(j)+")";
vst.addLast(new String(s));
f(vit,vst);
vst.removeLast();
vit.removeLast();

vit.addLast(vi.get(i)-vi.get(j));
s="("+vs.get(i)+"-"+vs.get(j)+")";
vst.addLast(new String(s));
f(vit,vst);
vst.removeLast();
vit.removeLast();

vit.addLast(vi.get(i)*vi.get(j));
s="("+vs.get(i)+"*"+vs.get(j)+")";
vst.addLast(new String(s));
f(vit,vst);
vst.removeLast();
vit.removeLast();

if(vi.get(j)!=0)
{
vit.addLast(vi.get(i)/vi.get(j));
s="("+vs.get(i)+"/"+vs.get(j)+")";
vst.addLast(new String(s));
f(vit,vst);
vst.removeLast();
vit.removeLast();
}
}
}
public static void main(String [] args)
{
Double a,b,c,d;
System.out.println("please input four numbers:");
Scanner cin=new Scanner(System.in);
a=cin.nextDouble();b=cin.nextDouble();c=cin.nextDouble();d=cin.nextDouble();
LinkedList<Double>vi=new LinkedList<Double>();
LinkedList<String>vs=new LinkedList<String>();
vi.add(a);vs.add(gc(a));
vi.add(b);vs.add(gc(b));
vi.add(c);vs.add(gc(c));
vi.add(d);vs.add(gc(d));
f(vi,vs);
if(vs_r.size()>0)
{
Iterator it=vs_r.iterator();
while(it.hasNext())
System.out.println(it.next());
}
else
System.out.println("sorry the four numbers can't be done");
}
}
xuzhiyun123 2005-04-23
  • 打赏
  • 举报
回复
大家帮忙看看我这个程序怎么改成面向对象的java程序吧,我尝试改写了几次都没有成功,估计是功力太浅的原因,还请大家帮忙一下谢谢
public class count24
{
public static void main(String[] args)
{
int[] fourint={13,9,8,4};
Character[] symbol=new Character[4];
symbol[0]=new Character('+');
symbol[1]=new Character('-');
symbol[2]=new Character('*');
symbol[3]=new Character('/');

int Result=0;

int lp=4*3*2*1;
int[][] lpint=new int[lp][4];
lp=4*4*4*4;
Character[][] lpsym=new Character[lp][4];
int n=fourint.length;
int m=0;

String equation="";

for (int i=0;i<n;i++)
{
for (int j=0;j<n;j++)
{
for (int k=0;k<n;k++)
{
for (int h=0;h<n;h++)
{
if (fourint[i]!=fourint[j] && fourint[i]!=fourint[k] &&
fourint[j]!=fourint[k] && fourint[i]!=fourint[h] && fourint[j]!=fourint[h]
&& fourint[h]!=fourint[k])
{
lpint[m][0]=fourint[i];
lpint[m][1]=fourint[j];
lpint[m][2]=fourint[k];
lpint[m][3]=fourint[h];
m++;
}
}
}
}
}

m=0;
for (int i=0;i<n;i++)
{
for (int j=0;j<n;j++)
{
for (int k=0;k<n;k++)
{
for (int h=0;h<n;h++)
{
lpsym[m][0]=symbol[i];
lpsym[m][1]=symbol[j];
lpsym[m][2]=symbol[k];
lpsym[m][3]=symbol[h];
m++;
}
}
}
}

m=0;
for (int i=0;i<lpint.length;i++)
{
outer: for (int j=0;j<lpsym.length;j++)
{
if (lpsym[j][0].compareTo(new Character('+'))==0)
{
Result=lpint[i][0]+lpint[i][1];
equation="("+lpint[i][0]+"+"+lpint[i][1]+")";
}
if (lpsym[j][0].compareTo(new Character('-'))==0)
{
Result=lpint[i][0]-lpint[i][1];
equation="("+lpint[i][0]+"-"+lpint[i][1]+")";
}
if (lpsym[j][0].compareTo(new Character('*'))==0)
{
Result=lpint[i][0]*lpint[i][1];
equation=lpint[i][0]+"*"+lpint[i][1];
}
if (lpsym[j][0].compareTo(new Character('/'))==0)
{
if (lpint[i][0]%lpint[i][1]==0)
{
Result=lpint[i][0]/lpint[i][1];
equation=lpint[i][0]+"/"+lpint[i][1];
}
else
{
j=j+4;
continue outer;
}
}

if (lpsym[j][1].compareTo(new Character('+'))==0)
{
Result=Result+lpint[i][2];
equation="("+equation+"+"+lpint[i][2]+")";
}
if (lpsym[j][1].compareTo(new Character('-'))==0)
{
Result=Result-lpint[i][2];
equation="("+equation+"-"+lpint[i][2]+")";
}
if (lpsym[j][1].compareTo(new Character('*'))==0)
{
Result=Result*lpint[i][2];
equation=equation+"*"+lpint[i][2];
}
if (lpsym[j][1].compareTo(new Character('/'))==0)
{
if (Result%lpint[i][2]==0)
{
Result=Result/lpint[i][2];
equation=equation+"/"+lpint[i][2];
}
else
{
j=j+4;
continue outer;
}
}

if (lpsym[j][2].compareTo(new Character('+'))==0)
{
Result=Result+lpint[i][3];
equation=equation+"+"+lpint[i][3];
}
if (lpsym[j][2].compareTo(new Character('-'))==0)
{
Result=Result-lpint[i][3];
equation=equation+"-"+lpint[i][3];
}
if (lpsym[j][2].compareTo(new Character('*'))==0)
{
Result=Result*lpint[i][3];
equation=equation+"*"+lpint[i][3];
}
if (lpsym[j][2].compareTo(new Character('/'))==0)
{
if (Result%lpint[i][3]==0)
{
Result=Result/lpint[i][3];
equation=equation+"/"+lpint[i][3];
}
else
{
j=j+4;
continue outer;
}
}

if (Result==24)
{
System.out.println("");
System.out.println("============= Countting Result
===============");
m++;
System.out.println("equation="+equation);
j=j+4;
continue outer;
}
}
}
if (m==0)
{
System.out.println("");
System.out.println("============= Notes ===============");
System.out.println("Sorry,Don't countting 24.");
}
System.out.println("============= End ===============");
}
}




xuzhiyun123 2005-04-23
  • 打赏
  • 举报
回复
很有可能是这个原因呢你的建议不错,你的程序写的也不错
faen 2005-04-23
  • 打赏
  • 举报
回复
注意你的eclipse用的jdk可能不是1.5的。
现在大家都用最新的jdk了,建议你更新以下,否则由很多新的好的功能你不能用。如:范型编程,
增强的for循环,等等
xuzhiyun123 2005-04-23
  • 打赏
  • 举报
回复
to 发恩你的程序真的不错但是我再ecplise上面调试有几个错误,
private static HashSet<String>vs_r=new HashSet<String>();
private static void f(LinkedList<Double>vi,LinkedList<String>vs)
LinkedList<Double>vi=new LinkedList<Double>();
这几句程序都有一些错误,我有点看不出来这几句的错误在哪里
faen 2005-04-23
  • 打赏
  • 举报
回复
我写的那个C++的就是用递归的,简单明了,好吧,我把它改为java的。
等一下。
faen 2005-04-23
  • 打赏
  • 举报
回复
呵呵,到时候,多给一点分吧 嘻嘻
xuzhiyun123 2005-04-23
  • 打赏
  • 举报
回复
真是太感谢你了,感动感动……
faen 2005-04-23
  • 打赏
  • 举报
回复
输入的数据可以是:
4 5 6 7
或者
5.5 4 4 4
或者
5 5 5 1
xuzhiyun123 2005-04-22
  • 打赏
  • 举报
回复
上面的是两个程序只要改写上面的那个就可以了也是一个24的程序
xuzhiyun123 2005-04-22
  • 打赏
  • 举报
回复
问一下我要如何吧下面的程序改成面向对象的java呢
public class count24
{
public static void main(String[] args)
{
int[] fourint={13,9,8,4};
Character[] symbol=new Character[4];
symbol[0]=new Character('+');
symbol[1]=new Character('-');
symbol[2]=new Character('*');
symbol[3]=new Character('/');

int Result=0;

int lp=4*3*2*1;
int[][] lpint=new int[lp][4];
lp=4*4*4*4;
Character[][] lpsym=new Character[lp][4];
int n=fourint.length;
int m=0;

String equation="";

for (int i=0;i<n;i++)
{
for (int j=0;j<n;j++)
{
for (int k=0;k<n;k++)
{
for (int h=0;h<n;h++)
{
if (fourint[i]!=fourint[j] && fourint[i]!=fourint[k] &&
fourint[j]!=fourint[k] && fourint[i]!=fourint[h] && fourint[j]!=fourint[h]
&& fourint[h]!=fourint[k])
{
lpint[m][0]=fourint[i];
lpint[m][1]=fourint[j];
lpint[m][2]=fourint[k];
lpint[m][3]=fourint[h];
m++;
}
}
}
}
}

m=0;
for (int i=0;i<n;i++)
{
for (int j=0;j<n;j++)
{
for (int k=0;k<n;k++)
{
for (int h=0;h<n;h++)
{
lpsym[m][0]=symbol[i];
lpsym[m][1]=symbol[j];
lpsym[m][2]=symbol[k];
lpsym[m][3]=symbol[h];
m++;
}
}
}
}

m=0;
for (int i=0;i<lpint.length;i++)
{
outer: for (int j=0;j<lpsym.length;j++)
{
if (lpsym[j][0].compareTo(new Character('+'))==0)
{
Result=lpint[i][0]+lpint[i][1];
equation="("+lpint[i][0]+"+"+lpint[i][1]+")";
}
if (lpsym[j][0].compareTo(new Character('-'))==0)
{
Result=lpint[i][0]-lpint[i][1];
equation="("+lpint[i][0]+"-"+lpint[i][1]+")";
}
if (lpsym[j][0].compareTo(new Character('*'))==0)
{
Result=lpint[i][0]*lpint[i][1];
equation=lpint[i][0]+"*"+lpint[i][1];
}
if (lpsym[j][0].compareTo(new Character('/'))==0)
{
if (lpint[i][0]%lpint[i][1]==0)
{
Result=lpint[i][0]/lpint[i][1];
equation=lpint[i][0]+"/"+lpint[i][1];
}
else
{
j=j+4;
continue outer;
}
}

if (lpsym[j][1].compareTo(new Character('+'))==0)
{
Result=Result+lpint[i][2];
equation="("+equation+"+"+lpint[i][2]+")";
}
if (lpsym[j][1].compareTo(new Character('-'))==0)
{
Result=Result-lpint[i][2];
equation="("+equation+"-"+lpint[i][2]+")";
}
if (lpsym[j][1].compareTo(new Character('*'))==0)
{
Result=Result*lpint[i][2];
equation=equation+"*"+lpint[i][2];
}
if (lpsym[j][1].compareTo(new Character('/'))==0)
{
if (Result%lpint[i][2]==0)
{
Result=Result/lpint[i][2];
equation=equation+"/"+lpint[i][2];
}
else
{
j=j+4;
continue outer;
}
}

if (lpsym[j][2].compareTo(new Character('+'))==0)
{
Result=Result+lpint[i][3];
equation=equation+"+"+lpint[i][3];
}
if (lpsym[j][2].compareTo(new Character('-'))==0)
{
Result=Result-lpint[i][3];
equation=equation+"-"+lpint[i][3];
}
if (lpsym[j][2].compareTo(new Character('*'))==0)
{
Result=Result*lpint[i][3];
equation=equation+"*"+lpint[i][3];
}
if (lpsym[j][2].compareTo(new Character('/'))==0)
{
if (Result%lpint[i][3]==0)
{
Result=Result/lpint[i][3];
equation=equation+"/"+lpint[i][3];
}
else
{
j=j+4;
continue outer;
}
}

if (Result==24)
{
System.out.println("");
System.out.println("============= Countting Result
===============");
m++;
System.out.println("equation="+equation);
j=j+4;
continue outer;
}
}
}
if (m==0)
{
System.out.println("");
System.out.println("============= Notes ===============");
System.out.println("Sorry,Don't countting 24.");
}
System.out.println("============= End ===============");
}
}





public class count24
{
public static void main(String[] args)
{
int[] fourint={13,9,8,4};
Character[] symbol=new Character[4];
symbol[0]=new Character('+');
symbol[1]=new Character('-');
symbol[2]=new Character('*');
symbol[3]=new Character('/');

int Result=0;

int lp=4*3*2*1;
int[][] lpint=new int[lp][4];
lp=4*4*4*4;
Character[][] lpsym=new Character[lp][4];
int n=fourint.length;
int m=0;

String equation="";

//产生四位数值所有的排列组合
for (int i=0;i<n;i++)
{
for (int j=0;j<n;j++)
{
for (int k=0;k<n;k++)
{
for (int h=0;h<n;h++)
{
if (fourint[i]!=fourint[j] && fourint[i]!=fourint[k] && fourint[j]!=fourint[k] && fourint[i]!=fourint[h] && fourint[j]!=fourint[h] && fourint[h]!=fourint[k])
{
lpint[m][0]=fourint[i];
lpint[m][1]=fourint[j];
lpint[m][2]=fourint[k];
lpint[m][3]=fourint[h];
m++;
}
}
}
}
}

m=0;
for (int i=0;i<n;i++)
{
for (int j=0;j<n;j++)
{
for (int k=0;k<n;k++)
{
for (int h=0;h<n;h++)
{
lpsym[m][0]=symbol[i];
lpsym[m][1]=symbol[j];
lpsym[m][2]=symbol[k];
lpsym[m][3]=symbol[h];
m++;
}
}
}
}

m=0;
for (int i=0;i<lpint.length;i++)
{
outer: for (int j=0;j<lpsym.length;j++)
{
if (lpsym[j][0].compareTo(new Character('+'))==0)
{
Result=lpint[i][0]+lpint[i][1];
equation="("+lpint[i][0]+"+"+lpint[i][1]+")";
}
if (lpsym[j][0].compareTo(new Character('-'))==0)
{
Result=lpint[i][0]-lpint[i][1];
equation="("+lpint[i][0]+"-"+lpint[i][1]+")";
}
if (lpsym[j][0].compareTo(new Character('*'))==0)
{
Result=lpint[i][0]*lpint[i][1];
equation=lpint[i][0]+"*"+lpint[i][1];
}
if (lpsym[j][0].compareTo(new Character('/'))==0)
{
if (lpint[i][0]%lpint[i][1]==0)
{
Result=lpint[i][0]/lpint[i][1];
equation=lpint[i][0]+"/"+lpint[i][1];
}
else
{
j=j+4;
continue outer;
}
}

if (lpsym[j][1].compareTo(new Character('+'))==0)
{
Result=Result+lpint[i][2];
equation="("+equation+"+"+lpint[i][2]+")";
}
if (lpsym[j][1].compareTo(new Character('-'))==0)
{
Result=Result-lpint[i][2];
equation="("+equation+"-"+lpint[i][2]+")";
}
if (lpsym[j][1].compareTo(new Character('*'))==0)
{
Result=Result*lpint[i][2];
equation=equation+"*"+lpint[i][2];
}
if (lpsym[j][1].compareTo(new Character('/'))==0)
{
if (Result%lpint[i][2]==0)
{
Result=Result/lpint[i][2];
equation=equation+"/"+lpint[i][2];
}
else
{
j=j+4;
continue outer;
}
}

if (lpsym[j][2].compareTo(new Character('+'))==0)
{
Result=Result+lpint[i][3];
equation=equation+"+"+lpint[i][3];
}
if (lpsym[j][2].compareTo(new Character('-'))==0)
{
Result=Result-lpint[i][3];
equation=equation+"-"+lpint[i][3];
}
if (lpsym[j][2].compareTo(new Character('*'))==0)
{
Result=Result*lpint[i][3];
equation=equation+"*"+lpint[i][3];
}
if (lpsym[j][2].compareTo(new Character('/'))==0)
{
if (Result%lpint[i][3]==0)
{
Result=Result/lpint[i][3];
equation=equation+"/"+lpint[i][3];
}
else
{
j=j+4;
continue outer;
}
}

if (Result==24)
{
System.out.println("");
System.out.println("============= Countting Result ===============");
m++;
System.out.println("equation="+equation);
j=j+4;
continue outer;
}
}
}
if (m==0)
{
System.out.println("");
System.out.println("============= Notes ===============");
System.out.println("Sorry,Don't countting 24.");
}
System.out.println("============= End ===============");
}
}
试了几次都不行,郁闷中
giant216 2005-04-21
  • 打赏
  • 举报
回复
学习
yulin001122 2005-04-21
  • 打赏
  • 举报
回复
算了 现在想想好象是没有 考虑
那用递归来实现吧 今天改一下 原来我写好第一个程序的时候才发现有点逻辑问题
那现在只能改下了
嘿嘿。。。
Squall1009 2005-04-21
  • 打赏
  • 举报
回复
4个数算24可以分成六中方法,只考虑括号,不考虑运算符号,然后把运算符+进去
specialsoldier 2005-04-21
  • 打赏
  • 举报
回复
hehe ,jiayou
MARS.nEIL 2005-04-20
  • 打赏
  • 举报
回复
原来贴可以有这么长?!!
xuzhiyun123 2005-04-20
  • 打赏
  • 举报
回复
to 雪地撒野 我已经知道了,我为什么出不来结果了,我用的调试工具是
eclipse,在dos下面调试应该可以出来结果的,又学到东西了
xuzhiyun123 2005-04-20
  • 打赏
  • 举报
回复
to 发恩,我只是懂一些c语言所以你的程序我就不怎么会改成java,真是不好意思
specialsoldier 2005-04-20
  • 打赏
  • 举报
回复
yulin001122() :
很简洁,效率没问题,但是逻辑有点漏洞,你第一个程序根本没考虑(a@b)@(c@d)这类的情况(@暂表示四则运算之一)如:(2+2)*(3+3),所以在第二个程序里用if判断后调用writeTwo()来弥补。但还有一种等式类型你没有判断:a@(b@c@d),如6/(1-3/4),8/(3-8/3),需要再添几个if判断然后调writeOthers()吧。

或者再自定义两个运算符吧,a--b表示b-a,a//b表示b/a,就不用增加那么多判断了,不过就变成六则运算了,呵呵,能不能这么说不知道。
yulin001122 2005-04-20
  • 打赏
  • 举报
回复

public class TwentyFour {
static short num[] = new short[4];
static char op[] = new char[3];
public static void main(String args[]){
short a[] = new short[4];
a[0] = Short.parseShort( args[0] );
a[1] = Short.parseShort( args[1] );
a[2] = Short.parseShort( args[2] );
a[3] = Short.parseShort( args[3] );


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 p = 0 ; p < 4 ; p ++){
if(p == k || p == j || p==i ) continue;
num[0] = a[i];
num[1] = a[j];
num[2] = a[k];
num[3] = a[p];
next((int)num[0] ,0);
if( (num[0] + num[1] ) * (num[2] + num[3] ) == 24)
writeTwo(num[0],'+',num[1],'*',num[2],'+',num[3]);
if( (num[0] - num[1] ) * (num[2] + num[3] ) == 24)
writeTwo(num[0],'-',num[1],'*',num[2],'+',num[3]);
}
}
}
}
}
static void next(int current, int count){
if( count >= 3){
if(current == 24){
write();
}
return;
}

int n = num[count + 1];
op[count] = '*';
next(current * n, count + 1);
if( (n != 0) && (current > n) && ((current % n) == 0) ){
op[count] = '/';
next(current / n , count + 1);
}
op[count] = '+';
next(current + n, count + 1);
op[count] = '-';
next(current - n , count + 1);
}

static void writeTwo(int num1, char op1,int num2 ,char op2,int num3 ,char op3,int num4){
System.out.println("(" + num1 + op1 + num2 + ")" + op2 + "(" + num3 + op3 + num4 + ")");
}

static void write(){
System.out.println("((" + num[0] + op[0] + num[1] + ")" + op[1] + num[2] + ")"+ op[2] + num[3] );
}
}

现在好了 就是效率低了点 可扩展性也不好
加载更多回复(42)

67,538

社区成员

发帖
与我相关
我的任务
社区描述
J2EE只是Java企业应用。我们需要一个跨J2SE/WEB/EJB的微容器,保护我们的业务核心组件(中间件),以延续它的生命力,而不是依赖J2SE/J2EE版本。
社区管理员
  • Java EE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧