旋转字符游戏matlab实现(思路+代码)

问题阐述

给定两个整数M、N,生成一个M*N的矩阵,矩阵中元素取值为A-Z的26个字母中的一个,A在左上角,其余各字母按顺时针方向旋转前进,依次递增放置,当超过Z时,又从A开始填充。例如,当M=5,N=8时。矩阵中的内容如下:
A B C D E F G H
V W X Y Z A B I
U J K L M N C J
T I H G F E D K
S R Q P O N M L

解题思路

1、让写字的位置按照顺时针方向前进,这样字母只要依次填入就好了;
2、建立字母表,用数组代表每一个字母;
3、定义当前移动的位置从(1,1)开始,定义前进方向;
4、定义行和列的起止位置;
当列数增加的方向走到头(列的终止位置),行的起始位置+1(因为回不到现在所在的这一行了);方向转变到行数增加方向;
当行数增加的方向走到头(行的终止位置),列的终止位置-1(因为回不到现在所在的这一列了);方向转变到列数减小方向;
当列数减小的方向走到头(列的起始位置),行的终止位置-1;方向转变到行数减小方向;
当行数减小的方向走到头(行的起始位置),列的起始位置+1;方向转变到列数增加方向;
5、对第4步进行循环,共循环M*N次;

matlab代码

clear
clc
m = input("请输入矩阵行数:");
n = input("请输入矩阵列数:");
num = zeros(m,n);
ab = ['A' 'B' 'C' 'D' 'E' 'F' 'G' 'H' 'I' 'J' 'K' 'L' 'M' 'N'...
    'O' 'P' 'Q' 'R' 'S' 'T' 'U' 'V' 'W' 'X' 'Y' 'Z'];
i = 1;      %矩阵位置行,j列
j = 1;
k = 1;      %ab表位置
e = 0;      %初始方向
c = 1;      %loop
cont = 0;
sm = 1;     %行起始位置
sn = 1;     %列起始位置
em = m;     %行终止位置
en = n;     %列终止位置
while c
    switch e
        case 0      %列增大方向
            num(i,j) = ab(k);
            j = j+1;
            if j==en
                e = 1;
                sm = sm+1;
            end
        case 1      %行增大
            num(i,j) = ab(k);
            i = i+1;
            if i==em
                e = 2;
                en = en-1;
            end
        case 2      %列减小
            num(i,j) = ab(k);
            j = j-1;
            if j==sn
                e = 3;
                em = em-1;
            end
        case 3      %行减小
            num(i,j) = ab(k);
            i = i-1;
            if i==sm
                e = 0;
                sn = sn+1;
            end
        otherwise
            warning("有问题?");
    end
    cont = cont+1;
    k = k+1;
    if k==27
        k = 1;
    end
    if cont==m*n
        c = 0;
    end
end
char(num)       %字符矩阵输出

运行结果(7*12为例)

请输入矩阵行数:7
请输入矩阵列数:12
>> char(num)

ans =

  7×12 char 数组

    'ABCDEFGHIJKL'
    'HIJKLMNOPQRM'
    'GHIJKLMNOPSN'
    'FGZABCDEFQTO'
    'EFYXWVUTSRUP'
    'DEDCBAZYXWVQ'
    'CBAZYXWVUTSR'

其他

我这是头一次使用CSDN发文章,室友给了我这道题,做出来感觉还不错就想记录一下。如果有什么问题,欢迎大家留言~

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值