一、主要使用的函数
randperm(a,b) | 获取a到b的随机b个整数 |
input(prompt,'s') | 获取用户输入,用‘s’表示将用户的输入转化为char的形式,没有‘s'则是按默认的数值类型读取 |
str2double() | 将字符转变为数字类型 |
ismember(a,b) | 判断元素a是否在b内,如果在返回1 |
sprintf() | 字符串格式化函数,%d表示数字类型,%s表示字符类型 |
二、设计思路
1、题目
2、思路
题目要求生成四个随机数,调用具体的函数就可以实现,获取玩家输入可以使用input函数。对于计算,我觉得先计算B会比较方便,使用函数ismember可以实现判断一个元素在不在一个数据集中;对于A的计算,是在B的基础上的,如果位置正确,那么这个数字一定在数据集中,所以在上一个的if条件下,再次条件限制。各个计算值根据循环开始时的初始变量叠加就可以实现计数功能。
三、遇到的问题
1.字符串的遍历
刚开始我写的代码,在调用input时没有加上‘s’参数,得到的是MATLAB数值类型,不能进行遍历。经过查找资料,添加上参数后可以直接遍历。perfect!
2.字符串的拼接
我在实现字符串拼接时,沿用的是python的语法体系,字符串做加法运算,但在MATLAB中提示变量不存在,经过一番思考,最后使用[A B]的形式拼接成功。
3.数组的索引
使用小括号进行索引
四、代码展示
k = randperm(9,4);
pl=1;
while pl<=10 || a==4
pl=pl+1;
s=input("输入:","s");
new_str = '';
b=0;
a=0;
n =0;
for o=s
n=n+1;
%p=''; 字符拼接会显示错误,对于此运算,数组的大小不兼容。
u=str2double(o);%把字符转变为数字
if ismember(u,k)==1
p = sprintf('%sA',o);
new_str = [new_str p];
b=b+1;
if u==k(n)
a=a+1;
end
end
end
ll = sprintf('%dA%dB',a,b);
disp(ll)
end