Как определить, имеет ли целое число в Java Intstream форму 3x + 1? - PullRequest
3 голосов
/ 28 февраля 2020

Мне был задан вопрос:

Найдите и напечатайте (по одному в строке) те значения a , которые имеют форму 3x + 1 для некоторого x. Каждое такое значение должно быть напечатано только один раз, в том положении, в котором оно появляется впервые.

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

Это код, который мне дали для начала:

import java.util.*;
import java.util.stream.*;

class Example {

  public static void main(String argv[]) {
    int a[] =
      Arrays.stream(argv)
      .mapToInt(s -> Integer.parseInt(s))
      .toArray();
  }
      // fill in here with expression starting Arrays.stream(a)

}

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

1 Ответ

7 голосов
/ 28 февраля 2020

Если a имеет форму 3x + 1, то a - 1 = 3x, и, таким образом, вы хотите вычесть одно из каждого значения, а затем проверить, равен ли остаток с делением нулю. Затем распечатайте спички. Кроме того, вы можете использовать Integer::parseInt, и я бы предпочел форму int[] a вместо int a[] (вторая форма была сохранена, чтобы быть знакомой C и разработчикам на C ++) и (как указано ernest_k в комментарий используйте distinct() для обеспечения уникальности). Мол,

int[] a = Arrays.stream(args).mapToInt(Integer::parseInt).toArray();
Arrays.stream(a).filter(x -> (x - 1) % 3 == 0)
        .distinct().forEach(System.out::println);
...