如何用Matlab语言编写在1~14的数中随机选14个互不相同的数!而且使得第2k个数等于其前后的两个数之和(第十四个数等于第十三个数和第一个数之和);这个问题可以把它看成一个环,从不同的

来源:学生作业帮助网 编辑:六六作业网 时间:2024/12/24 01:11:34
如何用Matlab语言编写在1~14的数中随机选14个互不相同的数!而且使得第2k个数等于其前后的两个数之和(第十四个数等于第十三个数和第一个数之和);这个问题可以把它看成一个环,从不同的如何用Mat

如何用Matlab语言编写在1~14的数中随机选14个互不相同的数!而且使得第2k个数等于其前后的两个数之和(第十四个数等于第十三个数和第一个数之和);这个问题可以把它看成一个环,从不同的
如何用Matlab语言编写在1~14的数中随机选14个互不相同的数!
而且使得第2k个数等于其前后的两个数之和(第十四个数等于第十三个数和第一个数之和);
这个问题可以把它看成一个环,从不同的地方开环,会得到不同的数组,但数与数之间的相对位置还是相同的,该编程还要求剔除由于开环不同而得到的不同数组.

如何用Matlab语言编写在1~14的数中随机选14个互不相同的数!而且使得第2k个数等于其前后的两个数之和(第十四个数等于第十三个数和第一个数之和);这个问题可以把它看成一个环,从不同的
%按照题目意思,数列的偶数项为前后奇数项的和
%数列的偶数项的和正好是数列奇数项的和的两倍
%而偶数项和奇数项的和就是数列所有元素的和等于105
%所以奇数项和是35,偶数项和是70
a=nchoosek(1:14,7);%从14个数中选取7个数
b=a(sum(a,2)==35,:);%选出满足和为35的组合,是奇数项7个的所有可能组合
p=perms(2:7);%2-7的全排列
n=size(p,1);%2-7全排列的数量
p=[ones(n,1),p]%第1列添上1
%这时候p就是1-7的全排列中剔除所有循环数序相同的排列
v=zeros(1,14);%v储存一个结果
out=[];%out储存所有结果
for ii=1:size(b,1) %遍历奇数项7个数的所有可能组合
    O=b(ii,:); %取第ii个可能组合,将作为可能的奇数项
    E=setdiff(1:14,O); %E=剩下的7个数,将作可能的偶数组合
    for jj=1:n %遍历剔除循环的1-7全排列
        OO=O(p(jj,:)); %确定一种排列的奇数项OO
        EE=OO+OO([2:7 1]); %计算相邻奇数项的和得到偶数项EE
        if isequal(E,sort(EE)) %如果E和排序后的EE一致,则数列符合条件
            v(1:2:end)=OO; %OO填入奇数项
            v(2:2:end)=EE; %EE填入偶数项
            out=[out;v];   %保存符合条件的数列
        end
    end
end


得到的结果out是一个34x14的矩阵

34行表示可以找到符合条件的34个数列

每行的14个数,就是一组排列方式的14个数


下面是另一种算法,用栈记录填数,两个两个数地填入数字

得到的结果也是34x14的矩阵,互相引证结果的正确性

%明显数字1只能出现在奇数项
%因为要剔除其他循环相同的结果,限定1填在第一位
s=[ones(13,1),(14:-1:2)',zeros(13,12)];
%s为记录填数的堆栈,其中为0的位置表示未填数
%初始时s共有13行,第一列都为1,第二列为2-14
out=[];%储存结果
while ~isempty(s) %如果栈不空
    now=s(end,:); %now为栈顶的s
    s(end,:)=[];  %弹栈
    n=nnz(now);   %n为now中非零元素的个数
                  %也就是已填数字的个数
    if n==14      %如果已经填满
        if now(end)==now(end-1)+now(1);
            %第14个数如果是第13个数和第1个数的和
           out=[out;now];%符合条件,记录在out中
        end 
    else          %如果没填满
        left=setdiff(1:14,now(1:n));%找出未填的数字
        new1=now(n)-now(n-1);%计算下一个位置应该填的数字
        if  ~isempty(find(left==new1,1));%如果该数字可选
            left(left==new1)=[]; %选出该数字
            for ii=1:length(left)
              new=now; 
              new([n+1 n+2])=[new1 left(ii)];%填入该数字和下一个数字
              s=[s;new];%将增加了两个数字的序列入栈
            end
         end
    end
end

请问:如何用Matlab语言编写在N个数中随机选m个互不相同的数! 如何用Matlab语言编写在1~14的数中随机选14个互不相同的数!而且使得第2k个数等于其前后的两个数之和(第十四个数等于第十三个数和第一个数之和);这个问题可以把它看成一个环,从不同的 如何用Matlab语言编写在1~14的数中随机选14个互不相同的数!而且使得第2k个数等于其前后的两个数之和(第十四个数等于第十三个数和第一个数之和) Matlab中如何求循环次数.如何用matlab 语言求出该方程的n值. 如何用matlab绘制matlab的标志 如何用c语言编出下列程序 如何用C语言产生1-52的52个不同的数呀? 如何用matlab编一个随机数啊,例如编1000+—300,产生五十个随机数, 如何用C语言产生一个六位数的随机数?请问如何用C语言编一个程序算出随机的一个六位数随机数啊? 用C语言编写在100以内自然数种最大的能被32整除的数 matlab里面的函数wden如何用C语言实现啊?需要具体的算法~ 如何用matlab语言描述以下公式,在线等高手》》》》》》》》》》》 如何用MATLAB语言表示这几个式子?图片 如何用包装带编的篮子 如何用MATLAB.查询你所用机器的最大浮点数和最小浮点数 如何用matlab得到一个圆环想得到一个圆环,或者圆盘,不知道有没有直接的函数调用,或者自己编该怎么编? 如何用matlab画出xy=1的图形?急用~ 如何用c语言编一个比较三个数大小的程序,并输出最大值和最小值