关于通过键盘计算时间的程序

时间:2012-03-11 20:15:15

标签: c#

手机有12个输入键,('1','2','3','4','5','6','7','8','9',' 0','*'和'#')。

在标准文本输入模式下,每个键可用于输入字母和空格字符。例如,要访问字母“b”,用户将按两次“2”键。

按键需要用户至少100毫秒。如果用户必须使用相同的键输入连续的字符,则手机必须至少有0.5秒的暂停时间才能接受下一次按键代表新字符。

我想编写一个控制台应用程序,它接受任何可以使用C#使用网格中的键分配输入的字符串。应用程序应接受来自用户的输入,并计算用户使用键盘输入该字符串所需的最短时间以及所需的键序列。

如果有人知道谁可以帮助我编写程序。

1 个答案:

答案 0 :(得分:0)

这应该会给你一个想法:

class Mobilegrid
{
    const int MIN_DURATION = 100;
    const int WAIT_DURATION = 500;

    private static Dictionary<Char, Tuple<Char, int>> Grid;
    static Mobilegrid()
    {
        Grid = new Dictionary<Char, Tuple<Char, int>>();
        Grid.Add('a', Tuple.Create('2', 1));
        Grid.Add('b', Tuple.Create('2', 2));
        Grid.Add('c', Tuple.Create('2', 3));
        Grid.Add('d', Tuple.Create('3', 1));
        Grid.Add('e', Tuple.Create('3', 2));
        Grid.Add('f', Tuple.Create('3', 3));
        Grid.Add('g', Tuple.Create('4', 1));
        Grid.Add('h', Tuple.Create('4', 2));
        Grid.Add('i', Tuple.Create('4', 3));
        Grid.Add('j', Tuple.Create('5', 1));
        Grid.Add('k', Tuple.Create('5', 2));
        Grid.Add('l', Tuple.Create('5', 3));
        Grid.Add('m', Tuple.Create('6', 1));
        Grid.Add('n', Tuple.Create('6', 2));
        Grid.Add('o', Tuple.Create('6', 3));
        Grid.Add('p', Tuple.Create('7', 1));
        Grid.Add('q', Tuple.Create('7', 2));
        Grid.Add('r', Tuple.Create('7', 3));
        Grid.Add('s', Tuple.Create('7', 4));
        Grid.Add('t', Tuple.Create('8', 1));
        Grid.Add('u', Tuple.Create('8', 2));
        Grid.Add('v', Tuple.Create('8', 3));
        Grid.Add('w', Tuple.Create('9', 1));
        Grid.Add('x', Tuple.Create('9', 2));
        Grid.Add('y', Tuple.Create('9', 3));
        Grid.Add('z', Tuple.Create('9', 4));
    }

    public static int CalculateMinimumTime(String word)
    {
        int totalMillis = 0;
        for (int index = 0; index < word.Length; index++)
        {
            Tuple<Char, int> charInfo = Grid[word[index]];
            int Pos = charInfo.Item2;
            int clickTime = Pos * MIN_DURATION;
            if (index != 0)
            {
                Tuple<Char, int> lastCharInfo = Grid[word[index - 1]];
                if (lastCharInfo.Item1 == charInfo.Item1)
                    clickTime += WAIT_DURATION;
            }
            totalMillis += clickTime;
        }
        return totalMillis;
    }
}

然后您将获得所需的最短时间:

int totalMillis = Mobilegrid.CalculateMinimumTime("hello"); //1800

注意:你必须添加像空格一样的特殊字符。