均匀划分c#
在c#中如何将100均分为7?
结果就是
- 16
- 14
- 14
- 14
- 14
- 14
- 14
以下代码不正确,因为所有7个值都设置为15(总计105)。
double [] vals = new double[7]; for (int i = 0; i < vals.Length; i++) { vals[i] = Math.Ceiling(100d / vals.Length); }
在c#中有一个简单的方法吗?
谢谢
为了得到我建议的15,15,14,14,14,14,14的结果:
// This doesn't try to cope with negative numbers :) public static IEnumerable DivideEvenly(int numerator, int denominator) { int rem; int div = Math.DivRem(numerator, denominator, out rem); for (int i=0; i < denominator; i++) { yield return i < rem ? div+1 : div; } } Test: foreach (int i in DivideEvenly(100, 7)) { Console.WriteLine(i); }
干得好:
Func> f = (a, b) => Enumerable.Range(0,a/b).Select((n) => a / b + ((a % b) <= n ? 0 : 1))
祝你在课堂上解释它:)
由于这似乎是家庭作业,这里有一个提示,而不是完整的代码。
您正在进行Math.Ceiling并将14.28转换为15。
算法是这样的
- 将100除以7,将结果放入X.
- 获得X以下的最高偶数并将其放入Y.
- 将Y乘以7并将答案放在Z中。
- 从Z远离100。
答案是6批Y加上第4步的结果。
此算法可能仅适用于此特定实例。
我相信你可以用C#写出来
不确定这是否正是你所追求的,但我认为如果你使用Math.ceiling,你总会得到太大的总和。 Math.floor会低估并为您留下一些差异,可以根据您的需要添加到您的某件作品中。
例如,通过这种方法你最终可能会得到7个14的剩余部分给你2个剩余部分。然后你可以将这个2放入你的一个部分中,给出你建议的答案,或者你可以将它平均分开并添加得到两件15件(如其中一条评论所述)
不确定为什么你正在使用双打但想要整数除法语义。
double input = 100; const int Buckets = 7; double[] vals = new double[Buckets]; for (int i = 0; i < vals.Length; i++) { vals[i] = Math.Floor(input / Buckets); } double remainder = input % Buckets; // give all of the remainder to the first value vals[0] += remainder;
具有更大灵活性的整数的例子,
int input = 100; const int Buckets = 7; int [] vals = new int[Buckets]; for (int i = 0; i < vals.Length; i++) { vals[i] = input / Buckets; } int remainder = input % Buckets; // give all of the remainder to the first value vals[0] += remainder; // If instead you wanted to distribute the remainder evenly, // priority to first for (int r = 0; r < remainder;r++) { vals[r % Buckets] += 1; }
值得指出的是,双重示例可能在数值上不稳定 ,因为某些输入值和桶大小可能导致泄漏的小数值。
上述就是C#学习教程:均匀划分c#分享的全部内容,如果对大家有所用处且需要了解更多关于C#学习教程,希望大家多多关注---计算机技术网(www.ctvol.com)!
本文来自网络收集,不代表计算机技术网立场,如涉及侵权请联系管理员删除。
ctvol管理联系方式QQ:251552304
本文章地址:https://www.ctvol.com/cdevelopment/998300.html