0

问题是:在一个有 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)
4

3 回答 3

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
于 2013-11-01T18:29:09.267 回答
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

编辑

对不起,我没有看到你的句子中的 less,所以我将>for<

于 2013-11-01T17:42:21.860 回答
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)

附加说明:

  1. 尝试测试代码以获得正确的 ans 5,因为由于随机数的均匀分布,这将有更多的变化机会。假设概率相等,大多数学生将至少得到 2 个正确答案,但实际情况并非如此。

  2. 尝试保持适当缩进的习惯。它将更具可读性且不易出错。

于 2013-11-01T17:45:57.093 回答