【问题标题】:Write a program to sum all the integers between 1 and 1000, that are divisible by 13, 15 or 17, but not by 30 [closed]编写一个程序来对 1 到 1000 之间的所有整数求和,这些整数可以被 13、15 或 17 整除,但不能被 30 整除 [关闭]
【发布时间】:2014-09-26 13:17:49
【问题描述】:

这是我的代码,我不知道接下来要做什么,我完全是初学者

        int number = lb;
        while(number <= ub){
            if (number % 7 == 0 && number % 15 == 0 && number % 17 == 0 && number % 30 != 0 ){
                sum+= number;       

            }
            number++;               
        }
        System.out.println("Answer: " + sum);
    }

}

【问题讨论】:

  • 可被 13、15 或 17 整除意味着您应该使用 OR 而不是 AND
  • 提示 --> || 不是 &amp;&amp;
  • 你需要这种if .if ((number % 13 == 0 || number % 15 == 0 || number % 17 == 0) &amp;&amp;number % 30 != 0 ){}
  • ...for 循环可能比 while 循环更清楚。

标签: java while-loop conditional-statements


【解决方案1】:

你必须这样做

    int sum=0;
    for(int i=0;i<1000;i++){ // iterate from 0 to 1000
        if ((i % 13 == 0 || i % 15 == 0 || i % 17 == 0) &&i % 30 != 0 ){
           // take numbers divide by 13 or 15 or 17 which not divide by 30
           sum=sum+i; // adding that number to current sum
        }
    }
    System.out.println("Answer: " + sum); // final sum

输出:

    Answer: 76795

【讨论】:

    【解决方案2】:

    使用最新版本 Java 8 一次性完成:

    package com.example;
    
    import static java.util.stream.IntStream.rangeClosed;
    import static java.lang.System.out;
    
    public class Main {
        public static void main(String[] args) {
            out.println(rangeClosed(1, 1000)
                       .filter(n -> n % 13 == 0 || n % 15 == 0 || n % 17 == 0)
                       .filter(n -> n % 30 != 0)
                       .sum());
        }
    }
    

    【讨论】:

      【解决方案3】:

      如果我理解你的问题,它应该很简单

      int sum = 0;
      // from 1 to 1000
      for (int num = 1; num <= 1000; num++) {
        if (num % 30 == 0) {
          continue; // If it's divisible by 30, skip it.
        }
        if (num % 13 == 0 || num % 15 == 0 || num % 17 == 0) {
          sum += num; // If it's divisible by 13 or 15 or 17 add it to sum.
        }
      }
      System.out.printf("sum = %d%n", sum);
      

      输出是

      sum = 76795
      

      【讨论】:

        【解决方案4】:
        int number = 0b1; //the proper way to start a binary number
                    int sum = 0;
        while(number <= 1000){
         if ((number % 13 == 0 || number % 15 == 0 || number % 17 == 0) && number % 30 != 0 ) {
          sum+= number;
        
           }
         number++;
        }
         System.out.println("Answer: " + sum);
        

        在您所说的问题中,数字可以被 13 或 15 或 17 整除,但不能被 30 整除,因此将相同的逻辑应用于 if 语句。这会给你正确的结果。

        答案:76795

        【讨论】:

        • number % 7 == 0 是为了什么?
        • 我现在已经改变了。感谢您指出。
        猜你喜欢
        • 2018-04-10
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2021-01-09
        • 2016-04-11
        • 1970-01-01
        相关资源
        最近更新 更多