wayne 发表于 2012-4-18 17:52:04

10# mathe
:P
mathe 貌似对 Mathematica来兴趣了,赫赫

mathe 发表于 2012-4-18 19:12:03

没有,今天发了很多贴,只是为了将主页上一些讨厌的广告信息去掉

wayne 发表于 2012-4-18 23:27:25


:L

hujunhua 发表于 2012-4-21 14:12:11

我也看不懂,Mathematica的函数真多
mathe 发表于 2012-4-18 13:20 http://bbs.emath.ac.cn/static/image/common/back.gif
所以才方便、强大。不过也养成了我的依赖性,凡事皆找找有没有现成合适的函数,实在打不到才自己想算法、手工写函数。可我自己用的并不熟练,所以经常在“Help”里到处翻箱倒柜。

wayne 发表于 2012-4-21 20:47:34

14# hujunhua
:lol
Mathematica程序就该这样写

〇〇 发表于 2012-4-22 21:17:33

javascript的eval可以用

chyanog 发表于 2013-6-25 12:11:51


calc24 :=   Block[{fmt, ok},
   fmt = {"((``````)````)````", "(``````)``(``````)",
   "(````(``````))````", "````((``````)````)", "````(````(``````))"};
   ok := If
         ] &@StringForm & @@ Riffle;
   Quiet@Do & /@ fmt, {op, {"+", "-", "×", "÷"}~Tuples~3}]];

calc24@{1, 2, 3, 4}
calc24~Scan~Permutations@{3, 3, 8, 8}
((1+2)+3)*4=24

(1+(2+3))*4=24

((1*2)*3)*4=24

(1*2)*(3*4)=24

(1*(2*3))*4=24

1*((2*3)*4)=24

1*(2*(3*4))=24

8/(3-(8/3))=24

wayne 发表于 2013-6-29 20:20:15

要是不限定各种操作符的使用次数,然后问题推广到n个数,就更有趣味了。

wayne 发表于 2013-7-3 18:24:49

@2^n
要是按题目的要求,数字和操作符都只使用一次,用软件或者编程语言,就有点大炮打蚊子,同样趣味不够

mathematica 发表于 2018-7-25 15:01:14

本帖最后由 mathematica 于 2018-7-25 17:04 编辑

#include<stdio.h>
char mark={'+','-','*','/'};
float cal(float x,float y,int mark)
{
switch(mark)
{
    case 0:return x+y;
    case 1:return x-y;
    case 2:return x*y;
    case 3:return x/y;
}
}
float calculate_A(float a,float b,float c,float d,int mark1,int mark2,int mark3)
{
float r1,r2,r3;
r1=cal(a,b,mark1);
r2=cal(r1,c,mark2);
r3=cal(r2,d,mark3);
return r3;
}
float calculate_B(float a,float b,float c,float d,int mark1,int mark2,int mark3)
{
float r1,r2,r3;
r1=cal(b,c,mark2);
r2=cal(a,r1,mark1);
r3=cal(r2,d,mark3);
return r3;
}
float calculate_C(float a,float b,float c,float d,int mark1,int mark2,int mark3)
{
float r1,r2,r3;
r1=cal(c,d,mark3);
r2=cal(b,r1,mark2);
r3=cal(a,r2,mark1);
return r3;
}
float calculate_D(float a,float b,float c,float d,int mark1,int mark2,int mark3)
{
float r1,r2,r3;
r1=cal(b,c,mark2);
r2=cal(r1,d,mark3);
r3=cal(a,r2,mark1);
return r3;
}
float calculate_E(float a,float b,float c,float d,int mark1,int mark2,int mark3)
{
float r1,r2,r3;
r1=cal(a,b,mark1);
r2=cal(c,d,mark3);
r3=cal(r1,r2,mark2);
return r3;
}
float get(int a,int b,int c,int d)
{
int mark1,mark2,mark3;
float flag=0;
for(mark1=0;mark1<4;mark1++)
{
    for(mark2=0;mark2<4;mark2++)
    {
      for(mark3=0;mark3<4;mark3++)
      {
      if(calculate_A(a,b,c,d,mark1,mark2,mark3)==24)
      {
          printf("((%d%c%d)%c%d)%c%d=24\n",a,mark,b,mark,c,mark,d);
          flag=1;
      }
      if(calculate_B(a,b,c,d,mark1,mark2,mark3)==24)
      {
          printf("(%d%c(%d%c%d))%c%d=24\n",a,mark,b,mark,c,mark,d);
          flag=1;
      }
      if(calculate_C(a,b,c,d,mark1,mark2,mark3)==24)
      {
          printf("%d%c(%d%c(%d%c%d))=24\n",a,mark,b,mark,c,mark,d);
          flag=1;
      }
      if(calculate_D(a,b,c,d,mark1,mark2,mark3)==24)
      {
          printf("%d%c((%d%c%d)%c%d)=24\n",a,mark,b,mark,c,mark,d);
          flag=1;
      }
      if(calculate_E(a,b,c,d,mark1,mark2,mark3)==24)
      {
          printf("(%d%c%d)%c(%d%c%d)=24\n",a,mark,b,mark,c,mark,d);
          flag=1;
      }
      }
    }
}
return flag;
}
main()
{
int a,b,c,d;
printf("Please input 4 numbers(1~13):");
scanf("%d%d%d%d",&a,&b,&c,&d);
    if((a>=1&&a<=13)&&(b>=1&&b<=13)&&(c>=1&&c<=13)&&(d>=1&&d<=13))
    {
      get(a,b,c,d);
    }
      else
      {
      printf("Input illegal,please input again(1~13):");
      scanf("%d%d%d%d",&a,&b,&c,&d);
      if((a>=1&&a<=13)&&(b>=1&&b<=13)&&(c>=1&&c<=13)&&(d>=1&&d<=13))
         {
            get(a,b,c,d);
         }
      }
system("pause");
}
代码写得非常棒,我一下子看明白了
https://blog.csdn.net/xyisv/article/details/54709207
get(a,b,c,d);
get(a,b,d,c);
get(a,c,b,d);
get(a,c,d,b);
get(a,d,b,c);
get(a,d,c,b);
get(b,a,c,d);
get(b,a,d,c);
get(b,c,a,d);
get(b,c,d,a);
get(b,d,a,c);
get(b,d,c,a);
get(c,a,b,d);
get(c,a,d,b);
get(c,b,a,d);
get(c,b,d,a);
get(c,d,a,b);
get(c,d,b,a);
get(d,a,b,c);
get(d,a,c,b);
get(d,b,a,c);
get(d,b,c,a);
get(d,c,a,b);
get(d,c,b,a);

代码改成这24行,才完美


页: 1 [2] 3
查看完整版本: 求算24点的程序,要求快且求出所有解!