Разбить int на куски с максимальным значением - PullRequest
0 голосов
/ 30 апреля 2020

Я пытался сделать следующее, у меня есть максимальное значение и целое число, я хочу разделить это int следующим образом:

Max = 10
Int = 45
Result = [10, 10, 10, 10, 5]

Я уже много искал, и я не сделал не могу найти ничего похожего на то, что я хочу сделать, и у меня болит голова от мысли и попыток сделать это.

Спасибо за любую помощь!

Ответы [ 4 ]

5 голосов
/ 30 апреля 2020

Вам просто нужно повторить максимальное количество раз, которое оно делит на ваше значение. Затем, если он не делится равномерно, добавьте остаток.

int value = 45;
int max = 10;

var results = Enumerable.Repeat(max, value/max).ToList();
if(value % max != 0)
    results.Add(value % max);

Console.WriteLine(string.Join(",", results));
1 голос
/ 30 апреля 2020

Я думаю, что LINQ - самый хороший способ сделать это, но у вас также может быть простой подход l oop, который определяет, сколько раз размер соответствует вашему максимальному значению, затем добавьте эти числа к List<int>, и добавьте остаток (если есть) в список в конце.

var size = 10;
var max = 45;

// Find how many times the size fits and leftover
var goesInto = max / size;
var leftover = max % size;

var result = new List<int>();

// Add the sizes that fit in first
for (var i = 0; i < goesInto; i++)
{
    result.Add(size);
}

// Add leftover size at the end. 
if (leftover > 0)
{
    result.Add(leftover);
}
0 голосов
/ 30 апреля 2020

Вот как вы работаете в обычном коде без LINQ, List и т. Д. c. Это также позаботится о негативах

int val = -45; // negative
int max = 10;
int count = Math.Abs(val / max);
int rem = Math.Abs(val % max);
var output = new int[count + (rem == 0 ? 0 : 1)];
for(int i = 0; i < output.Length ; i++)
{
    if (i == output.Length - 1)
        output[i] = rem;
    else
        output[i] = max;
    Console.WriteLine(output[i]);
}
return output;

10 10 10 10 5

0 голосов
/ 30 апреля 2020

Это очень похоже на псевдокод. Однако мы напишем код C#, так как это был тег langauge.

//Need a list, or have to calculate the expected lenght. List is easier.
List<int> ResultList = new List<int>();

//Make a copy to work with
int temp = value;

//Now let us math down towards 0
while(temp>0){
  //All those multiples of Max are added first
  if(temp >= Max){
    ResultList.Add(Max);
    temp -= Max;
  }
  //We are down to the rest, here
  else{
    //If the rest is not 0, you can add it too
    if(temp > 0){
      ResultList.Add(temp);
      temp = 0;
    }
  }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...