我怎样才能在 C# 中进行平均反转?
How can I do an average reverse in c#?
我需要创建一个函数,如果我输入一个数字,return 3 个数字,你的平均值与我传递的数字相同
例如
如果我输入数字 3,92,return 值是一个数字列表 3,89 3,57 4,3(随机)
这里有一个方法可以做到这一点。
public double[] AverageReverse(double targetAverage, double range)
{
var r = new Random(); // TODO: Cache it between calls to avoid "why does ny Random class only produce the same numbers?"
var n1 = targetAverage - r.NextDouble() * range;
var n2 = targetAverage + r.NextDouble() * range;
var n3 = 3 * targetAverage - (n1 + n2);
return new[] { n1, n2, n3 };
}
示例:
var ar = AverageReverse(3.92, 0.5);
// returns (example):
// 3,76575929136284
// 3,98495292557634
// 4,00928778306082
// average:
// 3.92
它的工作方式是通过求解以下等式:
average = (n1 + n2 + n3) / 3
对于 n3 给出:
average = (n1 + n2 + n3) / 3
3 * average = n1 + n2 + n3
3 * average - (n1 + n2) = n3
因此:
n3 = 3 * average - (n1 + n2)
我需要创建一个函数,如果我输入一个数字,return 3 个数字,你的平均值与我传递的数字相同
例如
如果我输入数字 3,92,return 值是一个数字列表 3,89 3,57 4,3(随机)
这里有一个方法可以做到这一点。
public double[] AverageReverse(double targetAverage, double range)
{
var r = new Random(); // TODO: Cache it between calls to avoid "why does ny Random class only produce the same numbers?"
var n1 = targetAverage - r.NextDouble() * range;
var n2 = targetAverage + r.NextDouble() * range;
var n3 = 3 * targetAverage - (n1 + n2);
return new[] { n1, n2, n3 };
}
示例:
var ar = AverageReverse(3.92, 0.5);
// returns (example):
// 3,76575929136284
// 3,98495292557634
// 4,00928778306082
// average:
// 3.92
它的工作方式是通过求解以下等式:
average = (n1 + n2 + n3) / 3
对于 n3 给出:
average = (n1 + n2 + n3) / 3
3 * average = n1 + n2 + n3
3 * average - (n1 + n2) = n3
因此:
n3 = 3 * average - (n1 + n2)