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 秒。我尝试不使用循环,而是使用四个不同的变量——a、b、c、d、e,也尝试使用尽可能小的十进制类型。这些都不起作用。该程序的目的是找到至少 3 个所提供数字之间的最小多数除数。即 1、2、3、4、5 的最小除数是 4,因为它可以被 4、2 和 1 整除。数字在 1 到 100 的范围内。

4

1 回答 1

1

当我运行这个时,输入 = 1、2、3、4、5 的执行时间为 0.0024 毫秒——如果我将计时代码移到ReadLine循环之后。我的电脑可能比你的快很多,但我无法想象即使你在 Speak-n-Spell 上运行它也会超过 0.25 秒。

定时用户输入简直是疯狂的。如果这是由外部事物定时的,您确定输入应该逐行读取,而不是通过命令行传递吗?

于 2012-12-13T13:13:23.967 回答