加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

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();

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读