问题是: 在26名学生中,给出了10个问题的测试。学生们扔硬币来回答这个问题。我必须找出有多少学生有两个或更少的答案是正确的。这是我写的程序,但我不确定它...它好吗?
correct=0;
students=0;
for i=1:26
for j=1:10
answ=ceil(rand);
if answ==1
correct=correct+1;
if correct==2
students=students+1;
end
end
end
end
disp(students)
答案 0 :(得分:5)
它更整洁,运行更快,如果你这样做更具可读性矢量化:
answers = round(rand(10,26)); % 10x26 matrix of 0 / 1 values
correct = sum(answers); % sum along each column
students = sum(correct<=2) % how many values of correct are 2 or less
顺便说一下,从您的代码中看,您想知道有多少学生有2个或更多正确答案(而不是2或更少,如您所述)。在这种情况下,将最后一行更改为
students = sum(correct>=2) % how many values of correct are 2 or more
答案 1 :(得分:0)
就像这样:(你必须为每个学生重置正确的计数器,而某些end
不在正确的位置。)
correct = 0;
students = 0;
for i = 1:26
for j = 1:10
answ = ceil(rand);
if(answ==1)
correct = correct + 1;
end
end
if(correct < 2)
students = students + 1;
end
correct= 0;
end
修改强>
对不起,我没有看到你的意思减少了,所以我更改>
<
答案 2 :(得分:0)
对您的代码进行轻微修改:
correct=0;
students=0;
for i=1:26
for j=1:10
answ=round(rand); % Use round instead of ceil
if (answ==1)
correct=correct+1;
if correct==2
students=students+1;
break;
end
end
end
correct=0; % Was missing in original code
end
disp(students)
附加说明:
尝试测试正确的ans 5代码,因为随机数的均匀分布会导致更多的变异。假设概率相等,大多数学生将获得至少2个正确的答案,这不是实际情况。
尝试保持适当缩进的习惯。它更具可读性,更不容易出错。