雨量【难度:2级】:
答案1:
using System;
using System.Linq;
using System.Text.RegularExpressions;
class Rainfall
{
public static double[] gett(string t, string s) {
return s.Split('\n').First(x=>x.Contains(t)).Split(',').Select(x=>double.Parse(x.Split()[1])).ToArray();
}
public static double Mean(string t, string s)
{
return s.Contains(t+":") ? gett(t,s).Average() : -1;
}
public static double Variance(string t, string s)
{
var p=Mean(t,s);
return s.Contains(t+":") ? gett(t,s).Select(x=>(x-p)*(x-p)).Average() : -1;
}
}
答案2:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text.RegularExpressions;
class Rainfall
{
public static double Mean(string town, string strng)
{
var record = GetRecord(town, strng);
if (record == null) return -1;
var stats = GetStats(record).ToList();
return stats.Average();
}
public static double Variance(string town, string strng)
{
var record = GetRecord(town, strng);
if (record == null) return -1;
var stats = GetStats(record).ToList();
var mean = stats.Average();
var sumSqrtDiff = stats.Select(d => (d - mean)*(d - mean)).Sum();
return sumSqrtDiff/stats.Count;
}
private static string GetRecord(string town, string strng)
{
return strng.Split('\n').FirstOrDefault(record => record.Split(':').First().Equals(town));
}
private static IEnumerable<double> GetStats(string record)
{
var matches = Regex.Matches(record, "[-+]?\\d*\\.?\\d+([eE][-+]?\\d+)?");
return matches.Cast<Match>().Select(match => Convert.ToDouble(match.Value));
}
}
答案3:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Threading;
using System.Globalization;
class Rainfall
{
public static double Mean(string town, string strng)
{
double result = 0.0;
List<string> list = strng.Split('\n').ToList();
string temp = list.Where(x => x.StartsWith(town + ":"))