我需要得到一个数字的平均值,但不是以小数形式,我需要它在“公平”的整数形式。我不知道这是不是最好的解释方法,所以这里有一些例子。“公平”整数平均
例子:
51/4 = 12.75
但我需要的线沿线的东西更多:
51/4 = 13,13,13,12
任何建议,将不胜感激。
我需要得到一个数字的平均值,但不是以小数形式,我需要它在“公平”的整数形式。我不知道这是不是最好的解释方法,所以这里有一些例子。“公平”整数平均
例子:
51/4 = 12.75
但我需要的线沿线的东西更多:
51/4 = 13,13,13,12
任何建议,将不胜感激。
在伪码:
int base = floor(dividend/divisor);
int with_one_more = dividend MOD divisor;
其结果将是with_one_more
条目等于base+1
,和divisor-with_one_more
条目是base
。在你的例子中,dividend
= 51,divisor
= 4。这使得base
= 12和with_one_more
= 3。
那么,对于x/y,这将是一个包含数量(x div y)+ 1的列表,通常为(x mod y)次,并且它包含的数字(x div y)与y - (x mod y)次。
正如我理解你的“公平整数形式”的定义,算法来解决这一问题可以采取以下形式:
p/q
一些p
,q
,如果它还没有以这种形式出现的话)。51/4
案例你有12
和3/4
。拨打这些号码n
和p/q
。q
数字,其中第一个p
是n + 1
,其余的是n
。首先使用编程整数除法,然后使用模数找到余数。 这里是一个例子:
依靠整数除法摧毁你的余数。
99/5 = 19
然后用模找到其余
99 % 5 = 4
然后增加四个数字...
给
20 20 20 20 19
如果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.
在后面的符号中常见的是哪些字段?我从来没有见过它,但我觉得它奇怪有趣。 – 2011-02-15 15:19:37