c# – 从三角形的每一行获取最高数字并总结
发布时间:2020-12-15 23:47:16 所属栏目:百科 来源:网络整理
导读:我有三角形数字,它将作为参数发送到函数 59 64 6 80 7 1 5 现在这将作为字符串在下面的函数中接收,格式为5#9#6#4#6#8#0#7#1#5.到目前为止,我试图只涟漪来自#的数字 public class Sample{ public static string validtrianglesum(string input) { string sum=
我有三角形数字,它将作为参数发送到函数
5 9 6 4 6 8 0 7 1 5 现在这将作为字符串在下面的函数中接收,格式为5#9#6#4#6#8#0#7#1#5.到目前为止,我试图只涟漪来自#的数字 public class Sample { public static string validtrianglesum(string input) { string sum="0"; foreach(char num in input) { if(!num.Equals('#')) { Console.PrintLine(num); //here am getting only the nums excluding # //How to sum up based on each row } } return sum; //return } } 如何从每一行中得到最高数量并将它们相加,我如何识别行来总结它?希望能找到一些帮助. 解决方法
解决此问题的一种方法是确定三角形的大小.按尺寸我的意思是高度/宽度.例如,提供的三角形的大小为4.
如果大小为n,那么三角形中的元素数将为n(n 1)/ 2.当输入中的元素数量已知时,可以通过求解二次多项式并选择正解(下面的表达式涉及平方根)来求解n(大小): var triangle = "5#9#6#4#6#8#0#7#1#5"; var values = triangle.Split('#').Select(Int32.Parse).ToList(); var sizeAsDouble = (-1 + Math.Sqrt(1 + 8*values.Count))/2; var size = (Int32) sizeAsDouble; if (sizeAsDouble != size) throw new ArgumentException("Input data is not a triangle."); 因此,提供的输入大小将为4.然后,您可以使用大小选择三角形中的每一行并执行所需的算术: var maxValues = Enumerable .Range(0,size) .Select(i => new { Start = i*(i + 1)/2,Count = i + 1 }) .Select(x => values.Skip(x.Start).Take(x.Count)) .Select(v => v.Max()); 第一个Select将计算必要的索引,以正确切片在第二个Select中完成的值数组.再次使用公式n(n 1)/ 2.如果你愿意,你可以合并其中一些选择操作,但我认为将它们分开可以让它更清楚. 这个输出将是数字5,9,8,7.如果你想总结这些,你可以这样做: return maxValues.Sum(); (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |