2016-06-24 3 views
-1

мне нужно разделить 23 студентов на 5 групп, такКак распределить остаток от деления?

Dim i as Integer = 23 Mod 5 

дает остаток = 3.

Как я могу распределить остаток таким образом, что первый, второй, и третьей групп будет иметь один член более чем другие?

Или как начать распределение в обратном направлении, где пятый, четвертый и третий будут иметь 1 дополнительный член?

Я хочу, чтобы получить эти значения:

Dim groups(4) As Integer 
groups(0) = 5 
groups(1) = 5 
groups(2) = 5 
groups(3) = 4 
groups(4) = 4 
+1

слишком расплывчатой. Отправьте свой код. – Blorgbeard

+0

Хорошо, я добавил результат, который я ищу. Как это сделать, я совершенно не знаю. – Jnnno

+1

Как бы вы сделали это на столе, используя монеты? * У меня 23 пенни, и мне нужно 5 свай. Поэтому я распределяю 20 (5 свай из 4), и я оставлю остаток 3. Начните с обоих концов, возьмите один из остатка и добавьте его в кучу. У меня все еще есть дополнительные услуги? Если это так, подберите один, положите его на следующую кучу. У меня еще есть еще? Повторите. * Логика точно такая же, используя цикл. С какими особенностями вы испытываете трудности? –

ответ

0

Итак, вот ваша установка:

Dim groups As Integer() = New Integer(4) {} 
Dim students As Integer = 23 

Вы знаете, как рассчитать размер группы и остаток:

Dim groupSize As Integer = students \ groups.Length  ' \ is integer division 
Dim remainder As Integer = students Mod groups.Length 

Тогда пройти через каждую группу и присвоить ей размер:

For i As Integer = 0 To groups.Length-1 
    groups(i) = groupSize 
Next 

Наконец, вам необходимо распределить остаток. Согласно вашему вопросу, вы хотите добавить 1 к первому остаток количество групп.

Что переводится:

For i As Integer = 0 To remainder-1 
    groups(i) = groups(i) + 1 
Next 
0

Это работает для меня:

Dim value = 23 
Dim divisor = 5 
Dim remainder = value Mod divisor 

Dim groups(divisor - 1) As Integer 

For i = 0 To divisor - 1 
    groups(i) = value \ divisor + If(i < remainder, 1, 0) 
Next 
0

Вы можете попробовать следующий код

Dim r As Integer = 23 Mod 5 
Dim d As Integer = 23 \ 5 
Dim group(4) As Integer 
For i = 0 To group.Length - 1 
    group(i) = d 
    If r > 0 Then 
     group(i) += 1 
     r -= 1 
    End If 
Next 
Смежные вопросы