- 阅读权限
- 255
- 威望
- 0 级
- 论坛币
- 9353 个
- 通用积分
- 4294.7362
- 学术水平
- 157 点
- 热心指数
- 173 点
- 信用等级
- 130 点
- 经验
- 66005 点
- 帖子
- 642
- 精华
- 0
- 在线时间
- 1976 小时
- 注册时间
- 2009-10-6
- 最后登录
- 2025-12-14
|
正确答案: http://zh.wikipedia.org/zh/24%E7%82%B9
从扑克中任意抽出四张(数字表示为1-13),用加、减、乘、除的方法使结果成为24,每张牌只能用一次。 一副牌(52张)中,任意抽取4张可有1820种不同组合。
即不考虑顺序、以及花色,有 1820个组合。其中, 458个是无解的。即有1820-458= 1362个。
可我算出来,只有 1323个(只考虑数字)。每个组合提供一种计算方法。
若要考虑每个组合提供多种计算方法,正在思考中(未解决部分重复的问题)。
- data a;
- length expr $ 15;
- do x1=1 to 13;
- do x2=1 to 13;
- expr=cats('(',x1,'+',x2,')');value=x1+x2;output;
- expr=cats('(',x1,'-',x2,')');value=x1-x2;output;
- expr=cats('(',x1,'*',x2,')');value=x1*x2;output;
- expr=cats('(',x1,'/',x2,')');value=x1/x2;output;
- output;
- end;
- end;
- run;
- data b(drop=i j);
- retain x3-x4 value1 expr1;
- do i=1 to 13;
- do j=1 to 13;
- x3=i;x4=j;
- value1=(24+i)+j;expr1=cats('-',j,')','-',i);output;
- value1=(24+i)-j;expr1=cats('+',j,')','-',i);output;
- value1=(24+i)*j;expr1=cats('/',j,')','-',i);output;
- value1=(24+i)/j;expr1=cats('*',j,')','-',i);output;
- value1=(24-i)+j;expr1=cats('-',j,')','+',i);output;
- value1=(24-i)-j;expr1=cats('+',j,')','+',i);output;
- value1=(24-i)*j;expr1=cats('/',j,')','+',i);output;
- value1=(24-i)/j;expr1=cats('*',j,')','+',i);output;
- value1=(24*i)+j;expr1=cats('-',j,')','/',i);output;
- value1=(24*i)-j;expr1=cats('+',j,')','/',i);output;
- value1=(24*i)*j;expr1=cats('/',j,')','/',i);output;
- value1=(24*i)/j;expr1=cats('*',j,')','/',i);output;
- value1=(24/i)+j;expr1=cats('-',j,')','*',i);output;
- value1=(24/i)-j;expr1=cats('+',j,')','*',i);output;
- value1=(24/i)*j;expr1=cats('/',j,')','*',i);output;
- value1=(24/i)/j;expr1=cats('*',j,')','*',i);output;
- end;
- end;
-
- run;
- data a_result(drop=rc expr1 value1 value);
- retain x1-x4 expr;
- if _N_=0 then set a;
- declare hash h1 (dataset: 'a') ;
- declare hiter iter('h1');
- h1.defineKey('expr');
- h1.defineData(all:'yes');
- h1.defineDone() ;
- set a(rename=(x1=x3 x2=x4 value=value1 expr=expr1));
- rc = iter.first();
- do while(rc=0);
- select;
- when(abs((value*value1)-24)<=0.0001) do;expr=cats(expr,'*',expr1);output;end;
- when((value+value1)=24) do;expr=cats(expr,'+',expr1);output;end;
- when(value1<>0 and abs((value/value1)-24)<=0.0001) do;expr=cats(expr,'/',expr1);output;end;
- when((value-value1)=24) do;expr=cats(expr,'-',expr1);output;end;
- otherwise;
- end;
- rc=iter.next();
- end;
-
- run ;
- data b_result(drop=rc expr1 value1 value);
- retain x1-x4 expr;
- if _N_=0 then set a;
- declare hash h2 (dataset: 'a') ;
- declare hiter iter('h2');
- h2.defineKey('expr');
- h2.defineData(all:'yes');
- h2.defineDone() ;
- set b;
- rc = iter.first();
- do while(rc=0);
- if (value=value1) then do;
- expr=cats('(',expr,expr1);output;
- end;
- rc=iter.next();
- end;
-
- run ;
- data result;
- set a_result b_result;
- run;
- data result(drop=i j temp);
-
-
- retain cats x1-x4 expr;
- length cats $ 11;
- set result;
- array arr(*) x:;
- do i=1 to dim(arr);
- do j=1 to dim(arr)-1;
- if arr(j)>arr(j+1) then do;
- temp=arr(j);arr(j)=arr(j+1);arr(j+1)=temp;
- end;
- end;
- end;
-
- cats=catx('-',of x1-x4);
- run;
- proc datasets library=work detail;
- save result/mt=data;
- quit;
- proc sort data=result nodupkey;by cats;run;
复制代码
感兴趣,一起研究一下。再也不用担心玩24点了。
|
-
总评分: 论坛币 + 100
学术水平 + 5
热心指数 + 5
信用等级 + 5
查看全部评分
|