4张牌计算24点代码-遍历搜索-MATLAB代码
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 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);