% Matlab小程序,用4个数字加减乘除进行计算,得到24。
% 4 numbers, using + - * / to calc. 24
clear
num=[1 5 5 2];
S=perms('+-*/'); % Sign
N=unique(perms(num),'rows'); % Number
% expression
INDEX=0;
for i=1:size(N,1)
for j=1:size(S,1)
temps=[num2str(N(i,1)) S(j,1) num2str(N(i,2)) S(j,2) num2str(N(i,3)) S(j,3) num2str(N(i,4))];
INDEX=INDEX+1;formu(INDEX,:)={temps};
temps=['(' num2str(N(i,1)) S(j,1) num2str(N(i,2)) ')' S(j,2) num2str(N(i,3)) S(j,3) num2str(N(i,4))];
INDEX=INDEX+1;formu(INDEX,:)={temps};
temps=[num2str(N(i,1)) S(j,1) '(' num2str(N(i,2)) S(j,2) num2str(N(i,3)) ')' S(j,3) num2str(N(i,4))];
INDEX=INDEX+1;formu(INDEX,:)={temps};
temps=['(' num2str(N(i,1)) S(j,1) num2str(N(i,2)) S(j,2) num2str(N(i,3)) ')' S(j,3) num2str(N(i,4))];
INDEX=INDEX+1;formu(INDEX,:)={temps};
temps=['(' num2str(N(i,1)) S(j,1) num2str(N(i,2)) ')' S(j,2) '(' num2str(N(i,3)) S(j,3) num2str(N(i,4)) ')'];
INDEX=INDEX+1;formu(INDEX,:)={temps};
end
end
% eval expression
count=0;
expr={};
for i=1:INDEX
re=eval(char(formu(i,:)));
if re==24
count=count+1;
expr(count,:)={char(formu(i,:))}; %disp(strcat(tempS,' = 24'));
end
end
expr
转载本文请联系原作者获取授权,同时请注明本文来自张正逢科学网博客。
链接地址:http://blog.sciencenet.cn/blog-762216-1230770.html
上一篇:中国科学院武汉物理与数学研究所招聘电子仪器研究人员