如何用Matlab语言编写在1~14的数中随机选14个互不相同的数!而且使得第2k个数等于其前后的两个数之和(第十四个数等于第十三个数和第一个数之和)
来源:学生作业帮助网 编辑:作业帮 时间:2024/11/25 18:19:35
如何用Matlab语言编写在1~14的数中随机选14个互不相同的数!而且使得第2k个数等于其前后的两个数之和(第十四个数等于第十三个数和第一个数之和)
如何用Matlab语言编写在1~14的数中随机选14个互不相同的数!
而且使得第2k个数等于其前后的两个数之和(第十四个数等于第十三个数和第一个数之和)
如何用Matlab语言编写在1~14的数中随机选14个互不相同的数!而且使得第2k个数等于其前后的两个数之和(第十四个数等于第十三个数和第一个数之和)
function [R,ct] = my_sort14
% 1:14全排列,偶数位元素等于前后元素之和,末位数为第一位与前一位之和
% R:所有排列
% ct:排列总数
% 首先找出数列前3位符合条件的所有组合
R1 = [];
m = 1:14;
for k1 = m
for k2 = m
if k1 == k2, continue; end;
for k3 = m
if k3 == k1, continue; end;
if k3 == k2, continue; end;
k = [k1 k2 k3];
r = ck(k);
if ~isempty(r)
R1 = [R1;r];
end;
end;
end;
end;
% 从第4位开始每次增加2个元素并按规则检测
R2 = [];
n = (14-3-1)/2;
for v = 1:n
if v == 1
RR = R1;
else
RR = R2;
end;
R2 = [];
for k = 1:size(RR,1)
a = RR(k,:);
mm = setxor(a,m);
for p1 = mm(1:end-1)
for p2 = mm
if p1 == p2, continue; end;
pp = [a p1 p2];
r = ck(pp);
if ~isempty(r)
R2 = [R2;r];
end;
end;
end;
end;
end;
% 单独处理第14位元素
R = [];
for k = 1:size(R2,1)
a = R2(k,:);
p = setxor(a,m);
pp = [a p];
if pp(end) == pp(end-1)+pp(1)
R = [R;pp];
end;
end;
ct = size(R,1);
% 子函数:检测(除14外)偶位数元素是否等于前后元素之和
function r = ck(k);
if k(end-1) == k(end-2)+k(end)
r = k;
else
r = [];
end;