如何确定 Java Intstream 中的整数是否为 3x+1 形式?

Han*_*umi 2 java java-stream

我被问到的问题是:

找到并打印(每行一个)的那些值一个是形式3×+ 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)

}
Run Code Online (Sandbox Code Playgroud)

谢谢你的帮助。

Ell*_*sch 6

如果a具有3x + 1then形式a - 1 = 3x,因此您想从每个值中减去一个,然后测试除法余数是否为零。然后打印匹配项。此外,您还可以使用Integer::parseInt,我宁愿形式int[] aint 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);
Run Code Online (Sandbox Code Playgroud)

  • @Naman `x -> x % 3 == 1` 不适用于负数,因此 `x -> (x - 1) % 3 == 0` 更可取。 (3认同)
  • 我想你需要在某个地方调用“distinct()”,因为需要只打印一次数字。也可以仅限于一个流管道(没有中间“int[]”) (2认同)