2

给我的问题是:

查找并打印(每行一个)对于某些 x 格式为 3x+1 的 a值。每个这样的值应该只打印一次,在它第一次出现的位置。

我尝试了许多模数变体来尝试获得正确的数字,但我似乎无法解决这个问题。

这是我开始的代码:

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)

}

谢谢你的帮助。

4

1 回答 1

6

Ifa具有3x + 1then的形式a - 1 = 3x,因此您想从每个值中减去一个,然后测试除法的余数是否为零。然后打印匹配项。此外,您可以使用Integer::parseInt并且我更喜欢这种形式(保留第二种形式int[] a以使 C 和 C++ 开发人员熟悉)和(正如 ernest_k 在评论int a[]中指出的那样,使用 a来确保唯一性)。喜欢,distinct()

int[] a = Arrays.stream(args).mapToInt(Integer::parseInt).toArray();
Arrays.stream(a).filter(x -> (x - 1) % 3 == 0)
        .distinct().forEach(System.out::println);
于 2020-02-28T04:55:45.857 回答