“公平”整数平均值

时间:2011-02-15 15:15:20

标签: language-agnostic average

我需要得到一个数字的平均值,但不是十进制形式,我需要它以“公平”整数形式。我不知道这是否是解释它的最佳方式,所以这里有一些例子。

示例:

51 / 4 = 12.75

但我需要更多的内容:

51 / 4 = 13,13,13,12

任何建议都将不胜感激。

5 个答案:

答案 0 :(得分:7)

首先使用编程整数除法,然后使用Modulus查找余数。 这是一个例子:

依靠整数除法摧毁你的余数。

  

99/5 = 19

然后使用Modulus查找余数

99 % 5 = 4

然后增加四个数字......

列出

20 20 20 20 19

答案 1 :(得分:3)

在伪代码中:

int base = floor( dividend / divisor );
int with_one_more = dividend MOD divisor;

结果将是with_one_more条目等于base+1divisor-with_one_more条目为base。在您的示例中,dividend = 51,divisor = 4。这使base = 12,with_one_more = 3。

答案 2 :(得分:2)

嗯,对于x / y,这将是一个包含数字(x div y)+ 1和(x mod y)次数的列表,并且它包含数字(x div y)和y - ( x mod y)次。

答案 3 :(得分:1)

据我了解你对“公平整数形式”的定义,一种算法可以采用以下形式:

  1. 确定数字的合理表达式(例如某些p / q pq,如果它尚未出现在此表单中。
  2. 可选择将其缩小为最简化的形式(这将产生尽可能短的输出,但省略此步骤仍会生成“公平”列表)
  3. 将此表达式拆分为整数和剩余的小数部分 - 因此在51/4情况下,您有123/4。请拨打这些号码np/q
  4. 输出q个数字,其中p的第一个n + 1n,其余为{{1}}。

答案 4 :(得分:1)

如果51/4返回向下舍入的整数值,在这种情况下为12,则表示该值介于12和13之间,因此取51模数13为12。

x/y = z
x mod (z + 1) = w

您的数字是(y - 1)乘以z和w,例如:

63/4 = 15
63 mod (15 + 1) = 15

所以数字是(4 - 1)乘以16和15:16,16,16,15。