4张牌计算24点代码-遍历搜索-MATLAB代码

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

24点计算程序– MATLAB代码

(by LB)

代码有两部分构成

(1)Find.m: 24点计算的函数

(2)Point24.m:测试脚本

--------------------------------------------------Find.m程序如下-------------------------------------------------- function y=Find(input)

y=0;

%符号列表,用于格式化输出最后的表达式

sign=['+''-''*''/'];

% swapInput 用于保存input的输入值,同时用于迭代过程中的数据交换。

swapInput = input;

%双层循环用来交换数组中的元素

for loop1=1:4

if(y==1)

break;

end

for loop2=loop1:4

%交换swapInput中loop1和loop2位置的元素

temp=swapInput(loop1);

swapInput(loop1) = swapInput(loop2);

swapInput(loop2) = temp;

%a,b,c,d 为tempVector的四个元素,便于书写

a=swapInput(1);

b=swapInput(2);

c=swapInput(3);

d=swapInput(4);

% data为临时变量,用于保存中间计算结果

data=zeros(1,3);

% 四个数字之间有三个变电符号,i,j,k分别为(a b),(b c),(c d)之间的符号

% 用遍历的方法来找到24点

for i=1:4 % +-*/ between a and b

if(y==1)

break;

end

for j=1:4 % +-*/ between b and c

if(y==1)

break;

end

for k=1:4 % +-*/ between c and d

%模式1 ((a b) c) d

data(1) = OperateValue(a,b,i);

data(2) = OperateValue(data(1),c,j);

data(3) = OperateValue(data(2),d,k);

if(data(3)==24)

y=1;

str=sprintf('((%d %s %d) %s %d) %s %d',a,sign(i),b,sign(j),c,sign(k),d); str

break;

end

%模式2 (a (b c)) d

data(1) = OperateValue(b,c,j);

data(2) = OperateValue(a,data(1),i);

data(3) = OperateValue(data(2),d,k);

if(data(3)==24)

y=1;

str=sprintf('(%d %s (%d %s %d)) %s %d',a,sign(i),b,sign(j),c,sign(k),d); str

break;

end

%模式3 a ((b c) d)

data(1) = OperateValue(b,c,j);

data(2) = OperateValue(data(1),d,k);

data(3) = OperateValue(a,data(2),i);

if(data(3)==24)

y=1;

str=sprintf('%d %s ((%d %s %d) %s %d)',a,sign(i),b,sign(j),c,sign(k),d); str

break;

end

%模式4 (a b) (c d)

data(1) = OperateValue(a,b,i);

data(2) = OperateValue(c,d,k);

data(3) = OperateValue(data(1),data(2),j);

if(data(3)==24)

y=1;

str=sprintf('(%d %s %d) %s (%d %s %d)',a,sign(i),b,sign(j),c,sign(k),d); str

break;

end

%模式5 a (b (c d))

data(1) = OperateValue(c,d,k);

data(2) = OperateValue(b,data(1),j);

data(3) = OperateValue(a,data(2),i);

if(data(3)==24)

y=1;

str=sprintf('%d %s (%d %s (%d %s %d))',a,sign(i),b,sign(j),c,sign(k),d); str

break;

end

end

end

end

end

end

end

% 根据opMode 对数据m和n进行操作

% opMode = + - * /

function y=OperateValue(m,n,opMode)

switch(opMode)

case 1

y=m+n;

case 2

y=m-n;

case 3

y=m*n;

case 4

y=m/n;

otherwise

y=m+n;

end

end

--------------------------------------------------Point24.m程序如下-------------------------------------------------- clear;

clc;

% input: 一维数组,元素为输入四个数字,数组中是一组测试数据。

% y: =1 表示找到匹配,0 没有找到

input = [2 5 6 9];

y = Find(input);

相关文档
最新文档