【发布时间】:2018-11-27 02:11:42
【问题描述】:
我有下表
我需要计算出 X、Y 和 Z 列中的值。
规则 1:代码只有 X、Y 或 Z 等子级。
让我们从一个简单的开始,第 12 行,代码“E2”有一个名为“Z”的子代,值为 3.30,因此单元格 [F12](Z 列)应该有 3.30。我们可以表示为 f(12)= 3.30Z,类似地,单元格 [E11] 应该是 2.10,或者 f(11)=2.10Y。对于第 6 行,cell[D6] 应为 1.14,表示为 f(6)=1.14X。
注意,代码 X、Y、Z 本身没有子级。但是,其他孩子可以递归地拥有孙子。
规则 2:如果代码有子代码,则该值将是其自身值乘以子代码值。
例如第 10 行,它有一个子 'E2',因此无论子 (E2) 值如何,该值将是其值的 3.10 倍,即 f(10)=3.10*f(12)=3.10*3.30Z=10.23Z,单元格[F10] 应该是 10.23
规则 3,如果代码有多个子代,则值将按类型对所有子代进行总和,遵循规则 2
例如第 5 行 C1 有一个孩子 D,D 有三个孩子(X、E1、E2),这 3 个孩子的值需要相加。 f(5)=1.70*(f(8)+f(9)+f(10))。当然有的孩子有X值,有的有Y值,有的有Z值,所以加起来的时候需要按值类型分组,然后填入对应的列Cell[D5],Cell[E5] , 单元格[F5]
希望这是有道理的。
这是原始更复杂问题的简化版本,该问题有数千行和一些其他计算。但不是一个巨大的表,所以性能或速度不是优先考虑的因素。
这更像是一个算法问题,但我更喜欢用 C# 实现
【问题讨论】:
-
这是一个非常广泛的问题,我们很难回答。如果您尝试过某事并遇到特定问题,也许我们可以提供帮助?
-
完全不清楚你卡在哪一部分。请显示未按预期工作的代码(SO 不是代码编写服务)。
-
Peeyush。数据是正确的。代码代表化学成分。例如,第 6 行表示成分 C1 中有 1.14% 的成分 X。原来的化学代码很复杂,我这里换成伪代码来解决问题。
-
Rufus,我不知道从哪里开始这段代码。这绝对不是 for each 循环,必须是某种递归,但我不知道该怎么做。我将继续努力,希望能找到解决方案并将其发布在这里。同时,任何人给我一些建议将不胜感激。