每日一题——for循环

221 阅读2分钟

本文已参与「新人创作礼」活动, 一起开启掘金创作之路。
大家好,我是洋哥。今天给大家带来的是每日一题——for循环

题目要求

一个数如果恰好等于它的因子之和,那么这个数就称为"完数"。(因子:除去这个数本身正的约数)例如数字6。6的因子有1,2,3而6=1+2+3。请通过编程找出1000以内的所有完数,并求出个数和累加和。

 

建议用时:10-15分钟

难度:中等

 

知识点考察

这道题考察的是Java程序流程控制。主要的知识点考察是for循环的嵌套使用。

 

问题分析

第一,分析题目我们可以看出这是一个遍历的问题或者说是枚举的问题。所以第一个for循环(外层循环)就是从1到1000遍历。

第二,我们要定义一个sum来装累加和,定义一个count来记录个数。

第三,构造内层for循环。首先我们要得到这个数(定义为i)的因子,所以我们要对小于这个数的数(定义为j)进行遍历,判断i % j 的值,如果等于0,即为i的因子。其次我们要得到因子之和,我们可以在没得到一个因子时用factor += j来储存因子之和。最后判断i是否与factor相等,如果相等就是“完数”。

   

相关知识点复习

嵌套循环(多重循环)

将一个循环放在另一个循环体内,就形成了嵌套循环。其中,for ,while ,do…while均可以作为外层循环内层循环

 

内层循环结构遍历一遍,只相当于外层循环体执行了一次。

 

实质上,嵌套循环就是把内层循环当成外层循环的循环体。当只有内层循环的循环条件为false时,才会完全跳出内层循环,才可结束外层的当次循环,开始下一次的循环。

 

   

代码实现

public class WanShu {
static int count;
 
  public static void main(String[] args) {
  for (int i = 1; i <= 1000; i++) {
      int factor = 0;
      int sum=0;
      for (int j = 1; j < i; j++) {
          if (i % j == 0)
             factor += j;
      }
      if (factor == i) {
          System.out.println(i);
          count++;
          sum+=i;
      }
    }
    System.out.println("1-1000之间的完数个数为:" + count);
  }
}

 

总结和建议

for循环语句是我们最常用的循环语句,主要是它简便而且有众多变化,特别适合用作嵌套循环。对于嵌套循环的题目一般来说是不会超过三层的,一般两层居多,比如这道题。嵌套循环时一定要弄清楚四部分:

  • 初始化部分(init_statement)
  • 循环条件部分(test_exp)
  • 循环体部分(body_statement)
  • 迭代部分(alter_statement)

这样你做题就不会迷糊。