C#Beautiful Strings测试用例失败案例

时间:2013-10-15 15:53:08

标签: c#

我有一个问题:

当约翰还是个小孩子时,他没有太多事可做。没有互联网,没有Facebook,也没有可以破解的程序。所以他做了他唯一能做的事情......他在探索世界上最美丽的弦乐的过程中评估弦乐的美感。

鉴于字符串s,小约翰尼将字符串的美丽定义为字母之美的总和。每个字母的美丽是1到26之间的整数,包括两个字母,没有两个字母具有相同的美感。约翰尼并不关心字母是大写还是小写,因此不会影响字母的美感。 (例如,大写' F'与小写' f'完全一样美丽。)

你是一名学生撰写关于这位着名黑客年轻人的报告。你找到了约翰尼认为最美的字符串。这串的最大美妙之处是什么?

输入样本:

您的程序应该接受文件名路径作为其第一个参数。该文件中的每一行都有一个句子。 E.g。

ABbCcc
Good luck in the Facebook Hacker Cup this year!
Ignore punctuation, please :)
Sometimes test cases are hard to make up.
So I just go consult Professor Dalves

输出样本:

打印出弦乐的最大美感。 E.g。

152
754
491
729
646

这是我在C#中的代码:

static void Main(string[] args)
{
    StreamReader myR = new StreamReader(args[0]);
    List<string> myL = new List<string>();


    while (!myR.EndOfStream)
    {
        myL.Add(myR.ReadLine());
    }

    foreach (string item in myL)
    {
        int maxBeautifulNum = 0;
        string temp = item.ToLower();

        char[] myC = temp.ToCharArray();

        string[] tempS = new string[myC.Length];
        string tempCount;

        for (int i = 0; i < myC.Length; i++)
        {
            if ((myC[i] >= 'a' && myC[i] <= 'z') || (myC[i] >= 'A' && myC[i] <= 'Z'))
            {
                tempS[i] = myC[i].ToString();
            }

        }

        tempS = tempS.Where(w => !string.IsNullOrWhiteSpace(w)).ToArray();

        List<string> myCounterList = new List<string>();

        while(tempS.Length >= 1)
        {
            int count = 0;
            tempCount = tempS[0];

            for (int j = 0; j < tempS.Length; j++)
            {
                if (tempS[j] == tempCount)
                {
                    count++;
                }
            }

            myCounterList.Add(count.ToString());

            tempS = tempS.Where(w => w != tempCount).ToArray();
        }

        string[] myCounterString = myCounterList.ToArray();
        Array.Sort(myCounterString);
        Array.Reverse(myCounterString);

        for (int i = 0; i < myCounterString.Length; i++)
        {
            maxBeautifulNum += (26 - i) * int.Parse(myCounterString[i]);
        }
        Console.WriteLine(maxBeautifulNum);
    }
}

它只运行了一些测试,但我无法找到其他测试,因为它运行失败。 任何人都可以告诉我测试我的代码运行失败。

1 个答案:

答案 0 :(得分:1)

这是一个计算字符串“美丽”的基本LINQPad程序:

void Main()
{
    string[] inputs =
    {
        "a",
        "z",
        "A test",
        "A TEST",
        "a test"
    };

    foreach (var input in inputs)
    {
        var beauty =
            (from c in input
             let C = char.ToUpper(c)
             where C >= 'A' && C <= 'Z'
             select (int)(C - 'A') + 1).Sum();
        beauty.Dump(input);
    }
}

所有魔法都在循环内的单个LINQ语句中。

另外,要读取文件中的所有行,请使用:

string[] lines = File.ReadAllLines(fileName);