【问题标题】:DECIMATION LOGIC抽取逻辑
【发布时间】:2017-05-26 12:23:51
【问题描述】:

是否可以抽取一千个项目直到只剩下一个,如果可以,需要多少个抽取周期?通过抽取,我的意思是只删除十分之一并保留其余部分,例如,第一个周期:1000 - 900(删除十分之一:100) 第二循环:900 - 810(去掉十分之一:90)

【问题讨论】:

标签: math logic


【解决方案1】:

这取决于您使用的数字类型。 如果你使用浮点数,你最终会得到一个小于1 的值(虽然不完全是,如下java程序的输出所示):

class Main {
  public static void main(String[] args) {
    int i = 0;
    double val = 1000;
    while (val > 1) {
      val -= val/10;
      i++;
      System.out.println("val = " + val + " in iteration " + i);
    }
  }
}

输出摘录:

val = 900.0 in iteration 1
val = 810.0 in iteration 2
val = 729.0 in iteration 3
...
val = 1.0611166119964726 in iteration 65
val = 0.9550049507968253 in iteration 66

如果使用整数类型,将不会达到1,因为只要val == 9,它就不会变小,因为除法结果是0。我添加了一个检查来捕获该条件以防止无限循环。

让我们看看:

class Main {
  public static void main(String[] args) {
    int i = 0;
    int val = 1000;
    while (val > 1) {
      int subtract = val/10;
      if (subtract == 0) {
        System.out.println("subtracted value is 0 for value " + val + " at iteration " + i);
        break;
      }
      val -= subtract;
      i++;
      System.out.println("val = " + val + " in iteration " + i);
    }
  }
}

输出:

val = 900 in iteration 1
val = 810 in iteration 2
...
val = 10 in iteration 49
val = 9 in iteration 50
value 9 repeats at iteration 50

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-09-26
    • 2013-07-16
    • 2012-03-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多