0

次のプログラムの実行時間を短縮するにはどうすればよいですか。

using System;
using System.Diagnostics;
class LeastMM
{
    static void Main()
    {
        Stopwatch sw = new Stopwatch();
        sw.Start();
        byte[] nums = new byte[5];
        for (byte i = 0; i < nums.Length; i++)
        {
            nums[i] = byte.Parse(Console.ReadLine());
        }
        short? lmm = null;
        //uint currentI = 1;
        byte divisors = 0;
        //for (uint i = 1; i < nums.Length; i++) Console.WriteLine("{0} {1} ", i, nums[i]);
        for (short i = 1; ; i++)
        {
            divisors = 0;
            for (byte j = 0; j < nums.Length; j++)
            {
                if (i % nums[j] == 0) divisors++;
            }
            if (divisors >= 3) 
            {
                lmm = i;
                break;
            }
        }
        Console.WriteLine(lmm);
        sw.Stop();
        Console.WriteLine();
        Console.WriteLine(sw.Elapsed.Seconds + " or " +"0."+sw.Elapsed.Milliseconds);
    }
}

実行時間は 0.25 秒未満である必要があります。ループは使用しないようにしましたが、4 つの異なる変数 (a、b、c、d、e) も可能な限り最小の 10 進数型を使用しようとしました。これらのどれも機能しませんでした。このプログラムの目的は、提供された数値のうちの少なくとも 3 つの間の最小多数決除数を見つけることです。つまり、1、2、3、4、5 の最小多数除数は 4 です。これは、4、2、および 1 で割り切れるからです。数値は、1 から 100 までの範囲です。

4

1 に答える 1

1

これを実行すると、入力= 1,2,3,4,5の実行時間が0.0024msになります。タイミングコードをループの後に移動すると、ReadLine私のPCはあなたのPCよりもはるかに高速かもしれませんが、これをSpeak-n-Spellで実行しても、0.25秒を超えることは想像できません。

ユーザー入力のタイミングは非常にクレイジーです。これが外部の何かによってタイミングが取られている場合、入力は行ごとに読み取られ、コマンドラインを介して渡されないことになっていますか?

于 2012-12-13T13:13:23.967 に答える