matlab条件语句来比较生成的几个数的大小

img


这个题目感觉怪怪的,先是生成四个数然后还要用条件来比较,比较完还得用行矩阵表示,实在懵逼了,单挑每个步骤都会,可是合在一起完全没思绪了。

clc,clear,close all;
disp("4个0-10之间的随机整数组成的行矩阵:")
r = randi([0 10],1,4)  %使用randi函数生成在0~10之间均匀分布的4个随机整数
%条件语句冒泡排序行矩阵
n = length(r);
disp("从小到大排序后:")
y = paixu(r,n,0)
disp("从大到小排序后:")
y = paixu(r,n,1)

function y = paixu(x,n,flag)  %条件语句实现冒泡排序子函数  flag用于选择排序方式
for i = 2 : n
    for j = n : -1 : i
        if flag == 0
            if x(j) <  x(j-1)
                x([j,j-1]) = x([j-1,j]);
            end
        elseif flag == 1
            if x(j) >  x(j-1)
                x([j,j-1]) = x([j-1,j]);
            end
        end
    end
end
y = x; %返回排序结果
end

运行示例:

4个0-10之间的随机整数组成的行矩阵:

r =

     3     0     1     9

从小到大排序后:

y =

     0     1     3     9

从大到小排序后:

y =

     9     3     1     0

就是用行矩阵(行向量)来表示这四个数的大小关系,我这里用1表示最大的,4表示最小的。
本质上就是1,2,3,4这四个数的排列组合,一共有24种排列方式,这里我的逻辑只列举了6种
以第一种为例:第一个数大于第二个数,第二个数大于第三个数,第三个数大于第四个数,那么行矩阵就是[1 2 3 4]

n = [randi([0,10]), randi([0,10]), randi([0,10]), randi([0,10])];
if n(1) >= n(2) && n(2) >= n(3) && n(3) >= n(4)
    a = [1, 2, 3, 4];
elseif n(1) >= n(2) && n(2) >= n(4) && n(4) >= n(3)
    a = [1, 2, 4, 3];
elseif n(1) >= n(3) && n(3) >= n(2) && n(2) >= n(4)
    a = [1, 3, 2, 4];
elseif n(1) >= n(3) && n(3) >= n(4) && n(4) >= n(2)
    a = [1, 3, 4, 2];
elseif n(1) >= n(4) && n(4) >= n(2) && n(2) >= n(3)
    a = [1, 4, 2, 3];
elseif n(1) >= n(4) && n(4) >= n(3) && n(3) >= n(2)
    a = [1, 4, 3, 2];
end

因为题目要求用条件语句比较大小,所以用if-else枚举24种排列应该是题目的本意。这个题其实也从侧面考察你对条件判断的理解。

它的意思就是


第一步:你先生成0~10的整数,生成4个
第二步:将这4个数进行比较大小
第三步:比较之后用行矩阵表示出来。(第三步跟第二步关联不大)


第二步和第三步就像比较几个数大小之后,求一下几个数的和,联系不是很大。

我理解就是,先设定一个数组,14或者22,再生成4个0-10的随机数,没有不重复要求的话,随机执行4次即可,将4个数按先后顺序赋值给数组,然后再给数组排序,从大到小或者从小到大,可以用最常用的冒泡法编写,搞定。