假设我有一个数字,我需要分成40个数组,并保留剩余。 例如:
int Num = 140;
Wanted: 40, 40, 40, 20
int Num = 75;
Wanted: 40, 35
实现这一目标最优雅的方法是什么?
谢谢!
答案 0 :(得分:2)
提示:使用模数和除法。
140 / 40
- > 3
140 % 40
- > 20
所以,你可以将数字除以40,并在数组中包含那么多40
个。然后将数字mod 40附加到数组中。
伪代码:
int[] result = new int[number / 140] + 1
fill up the array with (number / 140) 40's with a for loop
set the last element to number % 140
答案 1 :(得分:1)
尝试此功能
List<int> split(int num, int splitBy)
{
List<int> r = new List<int>();
int v = Convert.ToInt32(num / splitBy);
r.AddRange(Enumerable.Repeat(splitBy, v).ToArray());
var remaining = num % splitBy;
if (remaining != 0)
r.Add(remaining);
return r;
}
答案 2 :(得分:0)
使用% Operator
,它会找到您的“剩余”。我会告诉你你的75个例子,但是因为这看起来很像家庭作业,所以我会留给你找出140版本。
int num = 75;
//numberOfEvens contains 1
int numberOfEvens = num / 40;
//remainder contains 35;
int remainder = num % 40;
答案 3 :(得分:0)
试试这段代码。它应该做你想要的。 但是当然要试着理解它,否则就没用了。
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace ConsoleApplication
{
class Program
{
static void Main(string[] args)
{
int[] r1 = Split(140, 30);
Print(r1);
int[] r2 = Split(140, 40);
Print(r2);
int[] r3 = Split(75, 40);
Print(r3);
}
public static void Print(int[] arr)
{
for (int i = 0; i < arr.Length; i++)
{
Console.Write(arr[i] + " ");
}
Console.WriteLine();
}
public static int[] Split(int N, int val)
{
List<int> lst = new List<int>();
int M = N;
int v = 0;
while (M > 0)
{
v = M > val ? val : M;
lst.Add(v);
M -= v;
}
return lst.ToArray();
}
}
}
答案 4 :(得分:0)
我的extension-method
使用LINQ:
public static class NumSplit
{
public static int[] NumSplit(this int iNum, int div)
{
var CountInts = Enumerable.Repeat(div, iNum / div);
var leftover = iNum % div;
return leftover > 0 ? CountInts.Concat(new int[] { leftover }).ToArray() : CountInts.ToArray();
}
}