我正在尝试完成以下任务:
创建 一个 脚本 那 将 反复 创建 一个 随机 整数 ķ 在 该 范围 的 0 至 20 直到 一切 案件 具有 是 进入 在 最小 一旦。 您 有 3 可能 案例。 案件 一个 是 进入 什么时候 该 范围 的 该 随机 整数 ķ 是 之间 要么 等于 至 0 和 7。 案件 乙 是 进入 什么时候 该 范围 的 该 随机 整数 ķ 是 之间 要么 等于 至 8 和 14。 案件 C 是 进入 什么时候 该 范围 的 该 随机 整数 ķ 是 之间 要么 等于 至 15 和 20。 规则: 什么时候 一个 案件 是 进入 您 必须 打印 至 该 用户 “恭喜 您 进入 案件 (一个, B, 要么 C)”。 您 能够 只要 输入 每 案件 一旦。 如果 该 程序 尝试 至 输入 该 相同 案件 更多 比 一旦, 您 必须 打印。 “无效, 那 案件 具有 已经 是 进入”。 该 程序 将 结束 一旦 所有 该 例 有 是 进入 和 该 程序 将 打印 “好 工作, 您 有 进入 所有 案件”。 如果 该 程序 尝试 至 输入 任何 已经 进入 例 更多 比 3 时 (3 总 时 不 只是 对于 一 具体 案件), 该 程序 将 结束 和 打印 至 该 用户 “那 随机 发电机 不 随机 足够的”。
这是我所拥有的代码。我花了几个小时来调试。我接近这个错误的方式????请让我知道。
K = round(rand*(20))
flag = 0;
counterA =0;
counterB=0;
counterC=0;
switch K
case {0,1,2,3,4,5,6,7}
fprintf('Congratulations you entered Case A\n')
flag = 1;
counterA = 1
case {8,9,10,11,12,13,14}
fprintf('Congratulations you entered Case B\n')
flag =2;
counterB = 1
case {15,16,17,18,19,20}
fprintf ('Congratulations you entered Case C\n')
flag = 3;
counterC = 1
end
while flag == 1 || flag == 2 || flag ==3
K = round(rand*(20))
if K >=0 && K<=7 && flag==1
disp ('Invalid, that case has already been entered')
counterA = counterA+1
elseif K >=8 && K<=14 && flag ==2
disp ('Invalid, that case has already been entered')
counterB=counterB+1
elseif K >=15 && K<=20 && flag==3
disp ('Invalid, that case has already been entered')
counterC =counterC+1
elseif K >=0 && K<=7 && flag ~=1
counterA =counterA+1
flag == 1;
if counterA==1&&counterB~=2 ||counterA==1&&counterC~=2
fprintf('COngrats guacamole A\n')
end
elseif K >=8 && K<=14 && flag ~=2
counterB=counterB+1
flag == 2;
if counterB ==1&&counterA~=2||counterB==1&&counterC~=2
fprintf('COngratsavacado B\n')
end
elseif K >=15 && K<=20 && flag~=3
counterC=counterC+1
flag == 3;
if counterC==1&&counterA~=2||counterC==1&&counterB~=2
fprintf ('Congratscilantro C\n')
end
end
if counterA==1 && counterB==1 && counterC==1
flag=100;
disp('DONE')
elseif counterA == 3|| counterB==3 || counterC==3
disp ('That random generator wasnt random enough')
flag =99;
elseif counterA==2||counterB==2||counterC==2
disp('Inval')
end
答案 0 :(得分:1)
关于您的代码的一些说法:
请勿使用counterA
,counterB
,counterC
等变量名称,而是使用包含3个元素的数组。在这种情况下:您只需要一个总限制,因此一个变量就足够了。
rand*20
生成0到20之间的随机值,但使用round(rand*20)
会导致0和20的概率降低。如果需要整数,请使用randi
。
使用“开始缩进”将代码格式化,使其更易于阅读。
这不是一个完整的解决方案,缺少3个错误的部分。我想你会自己解决这个问题。
caseNames={'A','B','C'};
caseEntered=[false,false,false];
%while there exist a case which is not entered and limit is not reached, continue
while ~all(caseEntered)
K = randi([0,20]);
switch K
case {0,1,2,3,4,5,6,7}
cs=1;
case {8,9,10,11,12,13,14}
cs=2;
case {15,16,17,18,19,20}
cs=3;
end
if caseEntered(cs)
%case has previously been entered, tdb
else
%case is entered frist time
fprintf('Congratulations you entered Case %s\n',caseNames{cs});
caseEntered(cs)=true;
end
end