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

ここに一行の解決策があります:

%#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 に答える
4

ループの代わりにこの行を試してください

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

low > 1まず、マスクは 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 に答える