楼主: l6397
5330 16

[问答] 怎样计算扑克牌24点 [推广有奖]

  • 0关注
  • 0粉丝

博士生

42%

还不是VIP/贵宾

-

威望
0
论坛币
120 个
通用积分
16.6418
学术水平
1 点
热心指数
6 点
信用等级
0 点
经验
3788 点
帖子
235
精华
0
在线时间
178 小时
注册时间
2007-3-28
最后登录
2023-5-13

楼主
l6397 发表于 2014-1-10 16:37:18 |AI写论文

+2 论坛币
k人 参与回答

经管之家送您一份

应届毕业生专属福利!

求职就业群
赵安豆老师微信:zhaoandou666

经管之家联合CDA

送您一个全额奖学金名额~ !

感谢您参与论坛问题回答

经管之家送您两个论坛币!

+2 论坛币
求助:各位高人!
有一种游戏,就是从52张扑克牌中随便抽出4张,用+ - * / (加、减、乘、除)算出24点。
请教如何用SAS快速计算出,并列出计算方式。
谢谢!!
二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

关键词:扑克牌 如何用 扑克牌

沙发
zhengbo8 发表于 2014-1-10 18:33:48
请问J、Q、K算11、12、13;还是1,2,3?

藤椅
wahaha2002 发表于 2014-1-10 21:06:25
会有好多种组合

板凳
linggol 发表于 2014-1-10 23:14:27
还是用SAS算算怎么买彩票能中奖吧,这个比较有用。

报纸
linggol 发表于 2014-1-10 23:15:54
还是用SAS算算怎么票买彩票能中奖吧,这个比较有用。

地板
zhengbo8 发表于 2014-1-11 00:56:35
正确答案:http://zh.wikipedia.org/zh/24%E7%82%B9

从扑克中任意抽出四张(数字表示为1-13),用加、减、乘、除的方法使结果成为24,每张牌只能用一次。 一副牌(52张)中,任意抽取4张可有1820种不同组合。
即不考虑顺序、以及花色,有1820个组合。其中,458个是无解的。即有1820-458=1362个。


可我算出来,只有1323个(只考虑数字)。每个组合提供一种计算方法。
若要考虑每个组合提供多种计算方法,正在思考中(未解决部分重复的问题)。


  1. data a;
  2.         length expr $ 15;
  3.         do x1=1 to 13;
  4.                 do x2=1 to 13;
  5.                         expr=cats('(',x1,'+',x2,')');value=x1+x2;output;
  6.                         expr=cats('(',x1,'-',x2,')');value=x1-x2;output;
  7.                         expr=cats('(',x1,'*',x2,')');value=x1*x2;output;
  8.                         expr=cats('(',x1,'/',x2,')');value=x1/x2;output;
  9.                         output;
  10.                 end;
  11.         end;
  12. run;


  13. data b(drop=i j);

  14.         retain x3-x4 value1 expr1;

  15.         do i=1 to 13;
  16.                 do j=1 to 13;

  17.                         x3=i;x4=j;
  18.                         value1=(24+i)+j;expr1=cats('-',j,')','-',i);output;
  19.                         value1=(24+i)-j;expr1=cats('+',j,')','-',i);output;
  20.                         value1=(24+i)*j;expr1=cats('/',j,')','-',i);output;
  21.                         value1=(24+i)/j;expr1=cats('*',j,')','-',i);output;
  22.                         value1=(24-i)+j;expr1=cats('-',j,')','+',i);output;
  23.                         value1=(24-i)-j;expr1=cats('+',j,')','+',i);output;
  24.                         value1=(24-i)*j;expr1=cats('/',j,')','+',i);output;
  25.                         value1=(24-i)/j;expr1=cats('*',j,')','+',i);output;
  26.                         value1=(24*i)+j;expr1=cats('-',j,')','/',i);output;
  27.                         value1=(24*i)-j;expr1=cats('+',j,')','/',i);output;
  28.                         value1=(24*i)*j;expr1=cats('/',j,')','/',i);output;
  29.                         value1=(24*i)/j;expr1=cats('*',j,')','/',i);output;
  30.                         value1=(24/i)+j;expr1=cats('-',j,')','*',i);output;
  31.                         value1=(24/i)-j;expr1=cats('+',j,')','*',i);output;
  32.                         value1=(24/i)*j;expr1=cats('/',j,')','*',i);output;
  33.                         value1=(24/i)/j;expr1=cats('*',j,')','*',i);output;




  34.                 end;
  35.         end;
  36.         
  37. run;



  38. data a_result(drop=rc expr1 value1 value);

  39.         retain x1-x4 expr;

  40.         if _N_=0 then set a;
  41.         declare hash h1 (dataset: 'a') ;
  42.         declare hiter iter('h1');
  43.         h1.defineKey('expr');
  44.         h1.defineData(all:'yes');
  45.         h1.defineDone() ;

  46.         set a(rename=(x1=x3 x2=x4 value=value1 expr=expr1));

  47.         rc = iter.first();
  48.         do while(rc=0);
  49.                 select;
  50.                         when(abs((value*value1)-24)<=0.0001) do;expr=cats(expr,'*',expr1);output;end;
  51.                         when((value+value1)=24) do;expr=cats(expr,'+',expr1);output;end;
  52.                         when(value1<>0 and abs((value/value1)-24)<=0.0001) do;expr=cats(expr,'/',expr1);output;end;
  53.                         when((value-value1)=24) do;expr=cats(expr,'-',expr1);output;end;
  54.                         otherwise;
  55.                 end;
  56.            rc=iter.next();
  57.         end;
  58.         
  59. run ;


  60. data b_result(drop=rc expr1 value1 value);

  61.         retain x1-x4 expr;

  62.         if _N_=0 then set a;
  63.         declare hash h2 (dataset: 'a') ;
  64.         declare hiter iter('h2');
  65.         h2.defineKey('expr');
  66.         h2.defineData(all:'yes');
  67.         h2.defineDone() ;

  68.         set b;

  69.         rc = iter.first();
  70.         do while(rc=0);
  71.                 if (value=value1) then do;
  72.                         expr=cats('(',expr,expr1);output;
  73.                 end;
  74.            rc=iter.next();
  75.         end;
  76.         
  77. run ;


  78. data result;
  79. set a_result b_result;
  80. run;


  81. data result(drop=i j temp);
  82.         
  83.         
  84.         retain cats x1-x4 expr;
  85.         length cats $ 11;        

  86.         set result;
  87.         array arr(*) x:;
  88.         do i=1 to dim(arr);
  89.                 do j=1 to dim(arr)-1;
  90.                         if arr(j)>arr(j+1) then do;
  91.                                 temp=arr(j);arr(j)=arr(j+1);arr(j+1)=temp;
  92.                         end;
  93.                 end;
  94.         end;
  95.         
  96.         cats=catx('-',of x1-x4);
  97. run;

  98. proc datasets library=work detail;
  99.         save result/mt=data;
  100. quit;

  101. proc sort data=result nodupkey;by cats;run;
复制代码




感兴趣,一起研究一下。再也不用担心玩24点了。

已有 2 人评分论坛币 学术水平 热心指数 信用等级 收起 理由
admin_kefu + 100 热心帮助其他会员
jingju11 + 5 + 5 + 5 问题太复杂了。希望你可以研究出来。

总评分: 论坛币 + 100  学术水平 + 5  热心指数 + 5  信用等级 + 5   查看全部评分

7
zhengbo8 发表于 2014-1-11 05:05:33
缺的找不到原因?

8
zhengbo8 发表于 2014-1-11 13:40:50
找到原因了,差几种模式。
我只计算了概率大的形式:
(A_B)_(C_D)、
((A_B)_C)_D、

其中,_代表+、-、*、/。

9
l6397 发表于 2014-1-12 22:13:54
zhengbo8  牛!! SAS对数据的处理真是厉害。

10
mycpcw 发表于 2014-1-12 22:36:42

您需要登录后才可以回帖 登录 | 我要注册

本版微信群
加好友,备注cda
拉您进交流群
GMT+8, 2025-12-25 05:15