3
divisible = 0;
low = input('Start Value: ');
high = input('End Value: ');
divisor = input('Divisor: ');
mask = mod([low:high],divisor);

  for index = low:high
     if mask(index) == 0
        divisible = divisible + 1;
     end
  end

这个想法是计算没有余数的次数。

4

3 回答 3

4

试试这条线而不是循环

 divisible = sum(mask(low:high)==0);
于 2012-11-05T01:45:05.337 回答
4

这是一个单行解决方案:

%#Set the inputs
LB = 3;
UB = 28;
Divisor = 3;

%#A one-line solution
Count = sum(mod((LB:UB)', Divisor) == 0);
于 2012-11-05T01:44:26.630 回答
0

首先,您的例程会在任何时候给您一个错误low > 1,因为 mask 将从 1 开始并且具有 high - low + 1 个元素(并且当要求 mask(high) 时,您会得到错误)。

其次,你自己几乎得到了答案:

mask = mod([low:high],divisor);

将是一个包含 0 的向量,表示相应的值可以被除数整除。如果你这样做mask == 0,你将得到一个 1 和 0(真或假)的向量。

下一步是添加所有这些 1 和 0:

sum(mask==0)

所以你消除了 for...end 循环

于 2012-11-05T01:56:27.793 回答