2016-05-08 5 views
0

Я ищу способ разделить int на целые числа. Что я имею в виду: если у меня есть число 30, и я хочу разделить это на 4, я хочу, чтобы результат был 8,8,7,7. Есть ли способ в Java для этого? Спасибо заранее.Разделите int на целые числа

+1

Этот вопрос остается неясным , Почему 8,8,7,7, а не 8,8,8,6, например? Я голосую, чтобы закрыть его. В любом случае, если вам нужен намек, вы можете захотеть изучить алгоритмы Genetics *. – Aurasphere

+0

@Aurasphere: Да, это неясно, но очень вероятно, что неявное ограничение состоит в том, что числа отличаются не более чем одним. И нет, генетические алгоритмы не являются лучшим выбором для такой простой проблемы. –

+0

@FrankPuffer, если это проблема, вы правы, никаких генетических алгоритмов. Но я все еще думаю, что этот вопрос нужно отредактировать или закрыть. – Aurasphere

ответ

3

Несомненно, Java завершает работу и поэтому позволяет реализовать любой алгоритм.

Я предполагаю, что разница между результирующими числами должна быть не более одной - вы явно не пишете это.

Попробуйте это:

final int input = 30; 
final int numberOfPieces = 4;  

final int quotient = input/numberOfPieces; 
final int remainder = input % numberOfPieces; 

int [] results = new int[numberOfPieces]; 
for(int i = 0; i < numberOfPieces; i++) { 
    results[i] = i < remainder ? quotient + 1 : quotient; 
} 

Этот код сначала вычисляет целое частное, а затем равномерно распределяет остаток до первых «кусков».

+0

Четкое и довольно простое решение. Большое спасибо! Для этого он смотрел по всему Интернету! – user2988879

1

Поскольку вы не хотите, равный шпагата из числа, что вы можете сделать, это:

  1. Разделить число на сколько-либо части, которые вы хотите.

  2. Round() результат

  3. Сложите закругленными числа, сколько раз когда требуемое & чек, если сумма такой же, если не добавить или вычесть 1, как это необходимо.

Например: N = 150, части 4 =

=> 37.5, вокруг него круглое (37.5) => 38

Теперь, 38 * 4 = 152 и 152-150 = 2 так вычтите 2 из числа и ваш ответ 38, 38, 38 & 36.

Код:

import java.util.*; 
import java.lang.*; 
import java.io.*; 

class Ideone 
{ 
    public static void main (String[] args) throws java.lang.Exception 
    { 
     float number = 30.0f; 
     float parts = 4.0f;  

     float val = number/parts; 

     val = Math.round(val); 
     if (val * parts == number){ 
      System.out.println("Numbers are:"); 
      for (int i = 0; i < parts; i++) 
       System.out.println(val); 
     } 
     else { 
      int diff = Math.round((val * parts) - number); 
      System.out.println("Numbers are:"); 
      for(int i = 0;i < parts - 1; i++) 
       System.out.println(val); 
      System.out.println(val - diff); 
     } 
    } 
} 

Выход:

Numbers are: 
8.0 
8.0 
8.0 
6.0 

Если вы хотите, чтобы в равной степени разделить разницу в вышеописанном случае, то просто заменить еще часть с этим:

else { 
    int diff = Math.round((val * parts) - number); 
    System.out.println("Numbers are:"); 
    for (int i = 0; i < parts - diff; i++) 
     System.out.println(val); 

    for (int i = 0; i < diff; i++) 
     System.out.println(val - 1); 
} 

Ваш выход будет:

Numbers are: 
8.0 
8.0 
7.0 
7.0 
+0

Разве пользователь не хотел 8,8,7,7 в этом случае? И почему вы усложняете его, используя float? –

+0

Поплавки для дивизии. И «8,8,7,7» должны быть получены с использованием петли в конце. Я буду обновлять код для этого. –

+0

Java имеет целочисленное деление, которое уже решает часть проблемы. –

Смежные вопросы