我有一个问题:
当约翰还是个小孩子时,他没有太多事可做。没有互联网,没有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);
}
}
它只运行了一些测试,但我无法找到其他测试,因为它运行失败。 任何人都可以告诉我测试我的代码运行失败。
答案 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);