0

特定の数が与えられたときに 3 の倍数をすべて見つけ、余りも見つけたいと考えています。

たとえば、次のようになります。

数値 10 の場合: 3 の倍数 = {3;6;9} + 剰余 = 1

数値 11 の場合: 3 の倍数 = {3;6;9} + 剰余 = 2

私がこれまでに持っているアルゴリズム(コードではありません)は次のようになります。

  1. X が 3 の倍数かどうかを確認します - はい - 倍数を返します (剰余なし)。
  2. いいえ?x-1 は 3 の倍数です - はい - 倍数を返します (剰余 1);
  3. いいえ?x-2 は 3 の倍数です - はい - 倍数 (余り 2) を返します。

より少ないコードを使用して、これを行うためのより良い方法はありますか?

編集:あと2つ、私は3つしか探していないので、これはconstになる可能性があります。また、3 より小さい任意の数: 2、1、および 0 - そのための追加のロジックがあってもかまいません。

4

10 に答える 10

13
IEnumerable<int> Foo(int n, int k)
{
  int m = k;
  while (m <= n)
  {
    yield return m;
    m += k;
  }

  yield return m - n;
}
于 2013-08-09T13:05:29.200 に答える
12

整数除算( /) とモジュラス( %) は、ここであなたの友達です:

var multiples = num / 3;
var remainder = num % 3;
于 2013-08-09T13:03:28.833 に答える
4

x = 指定された番号
y = ループ番号

毎回 3 ずつ増やしながら、y を 0 から x までループさせます。
y > x の場合、remender は (x-(y-3)) です。

于 2013-08-09T13:04:50.667 に答える
1

除算器 / とモジュラス % を使用できます

http://msdn.microsoft.com/en-us/library/3b1ff23f.aspx

10 / 3 = 3

http://msdn.microsoft.com/en-us/library/0w4e0fzs.aspx

10 % 3 = 1
于 2013-08-09T13:04:34.407 に答える
1
int number = 10;
int divisor = 3;

List<int> numbers;

// Find all the numbers by incrementing i by the divisor.
for(int i = 0; i < number; i += divisor)
{
    numbers.Add(i);
}

// Find the remainder using modulus operator.
int remainder = number % divisor;
于 2013-08-09T13:05:33.057 に答える
1

ここにあなたの正確な出力があります

private static void Main(string[] args)
    {
        int num = 10;
        int divisor = 3;

        if(num<divisor)
            Console.Write(num + " is less than " + divisor);

        Console.Write("Given the number " + num + " : multiples of " + divisor + " = {");

        for (int i = divisor; i < num; i+=divisor)
            Console.Write((i!=3) ? ";"+i : i.ToString());

        Console.Write("} + remainder = " + num%divisor);

    }

出力

Given the number 10 : multiples of 3 = {3;6;9} + remainder = 1

入力が除数より小さいかどうかをチェックします

于 2013-08-09T13:07:34.233 に答える
0

これにより、必要な出力が得られます。

            int num;
            Console.WriteLine("give me a number equal or above 3!");
            int.TryParse(Console.ReadLine(),out num);
            int i = 0;
            List<int> nums = new List<int>();
            i += 3;
            while (i <= num)
            {
                nums.Add(i);
                i += 3;
            }

            Console.Write("Numbers are: ");
            foreach (int y in nums)
            {
                Console.Write(y + " , ");
            }
            Console.WriteLine("The remainder is " + (num - nums[nums.Count - 1]));
于 2013-08-09T13:29:51.470 に答える
0

LINQ はまさにこのために構築されたものではありませんか?

IEnumerable<int> GetMultiples(int max)
{
    return Enumerable.Range(1, max / 3)
                     .Select(p => p * 3)
                     .Concat((max %= 3) == 0 ? new int[0] : new int[] { max });
}
于 2013-08-09T13:36:17.063 に答える
0

モジュロ演算子を使用できます

%

しかし、たくさん使うと非常に遅くなります...

于 2013-08-09T13:08:40.597 に答える