黑马程序员技术交流社区

标题: -------------新版块第一期答题活动--------------- [打印本页]

作者: 张智文    时间: 2013-8-7 12:25
标题: -------------新版块第一期答题活动---------------
本帖最后由 张智文 于 2013-8-10 21:04 编辑

设计一个程序是求9999以内的“自身数”,并打印出其所有约数。所谓自身数是指这样的自然数:它的各个约数(不包括该数自身)之和等于该数自身
如28=1+2+4+7+14就是一个完全数。要求:打印需满足以下格式。   

               A:约数1  约数2  约数3......   例如 6: 1   2   3  
               B:约数1  约数2  约数3......         28: 1   2   4   7   14

               C:约数1  约数2  约数3......        496: 1   2   4   8   16   31   62   124   248


本题由实习版主-张智文提供,大家快点答题哦!     



作者: 李政    时间: 2013-8-7 13:43
本帖最后由 李政 于 2013-8-7 13:51 编辑
  1. class Demo
  2. {
  3.         public static void main(String[] args)
  4.         {
  5.                 for(int x =1;x<=9999;x++){//对1~9999之间作循环判断
  6.                         int y = yueshu(x);
  7.                         if(x==y){
  8.                         StringBuilder sb = new StringBuilder();//为打印规则服务
  9.                         int count = 1;
  10.                         while(count<x){
  11.                                 if(x%count == 0)
  12.                                         sb = sb.append("数"+new Integer(count).toString()+" ");
  13.                                 count++;
  14.                         }
  15.                                 System.out.println(x+"    "+sb.toString());
  16.                         }       
  17.                 }
  18.         }

  19.         public static int yueshu(int i){//检测这个数是否是自身数       
  20.                 int count = 1;
  21.                 int sum = 0;
  22.                 while(count < i){
  23.                         if(i%count == 0){
  24.                                 sum = sum +count;
  25.                         }       
  26.                         count++;
  27.                 }
  28.                 return sum;
  29.         }
  30. }
  31. //简单写了下,有待改进,可以把StringBuilder方法和约数方法合并起来
复制代码

作者: panningwjr    时间: 2013-8-7 15:40
import java.util.ArrayList;

/*
* 设计一个程序是求9999以内的“自身数”,并打印出其所有约数。所谓自身数是指这样的自然数:它的各个约数(不包括该数自身)之和等于该数自身
* */
public class Rhythm {

        public static void main(String[] args) {
                int num = 9999;
                // 循环遍历9999以内的所有数
                for (int i = 1; i < num; i++) {
                        // 定义集合,将所有约数装入集合中
                        ArrayList<Integer> alist = new ArrayList<Integer>();
                        // 循环遍历求出指定数的所有约数
                        for (int j = 1; j < i; j++) {
                                if (i % j == 0) {
                                        alist.add(j);
                                }
                        }
                        // 循环遍历集合,求出所有约数和,判断是否和原来的数相等
                        int sum = 0;
                        for (int approximate : alist) {
                                sum += approximate;
                        }
                        // 如果是自然数,就按指定格式打印
                        if (sum == i) {
                                System.out.println(i + ":" + alist.toString());
                        }
                }
        }
}



作者: 哪颗最亮的星星    时间: 2013-8-7 17:15
本帖最后由 哪颗最亮的星星 于 2013-8-7 17:18 编辑

已经做完,请审核!!!

Demo.rar

548 Bytes, 阅读权限: 100, 下载次数: 0

源代码


作者: xscn    时间: 2013-8-7 17:21
  1. import java.util.*;

  2. public class ZiRanShu{

  3. public static void main(String[] args) {

  4. for (int i = 1; i <=9999; i++)
  5. {
  6. List list = GongYueShu(i);
  7. Iterator it = list.iterator();

  8. int sum = 0;
  9. while (it.hasNext()) {

  10. sum += (Integer) it.next();//累加所有约数

  11. }
  12. if (sum == i)
  13. {
  14. sop(list, i);
  15. }

  16. }

  17. }
  18. //用List集合存储这个数的所有公约数
  19. public static List GongYueShu(int num) {
  20. List list = new ArrayList();
  21. for (int i = 1; i < num; i++){
  22. if (num % i == 0) {
  23. list.add(i);
  24. }
  25. }
  26. return list;
  27. }

  28. //制表打印
  29. public static void sop(List l, int i)
  30. {
  31. Iterator it = l.iterator();
  32. if(i<1000)
  33. System.out.print(i+"\t:"+it.next()+"\t");
  34. else
  35. System.out.print(i+":"+it.next()+"\t");
  36. while (it.hasNext())
  37. {
  38. System.out.print(it.next()+"\t");
  39. }
  40. System.out.println();
  41. }

  42. }

复制代码

屏幕截图.jpg (16.65 KB, 下载次数: 74)

屏幕截图.jpg

作者: xx_lee    时间: 2013-8-7 20:07
  1. [code]
  2. import java.util.*;

  3. class ZiShen
  4. {
  5.         public static void main(String[] args)
  6.         {
  7.                 for(int i=2;i<=9999;i++)
  8.                 {
  9.                         LinkedList<Integer> lt = new LinkedList<Integer>();
  10.                         int sum=0;
  11.                         for(int j=1;j<i;j++)
  12.                         {
  13.                                 if(i%j==0)
  14.                                 {
  15.                                         sum+=j;
  16.                                         lt.add(j);
  17.                                 }
  18.                         }
  19.                         if(i==sum)
  20.                         {
  21.                                 sop(i+":");
  22.                                 Iterator<Integer> it=lt.iterator();
  23.                                 while(it.hasNext())
  24.                                 {
  25.                                         sop(it.next());
  26.                                 }
  27.                                 System.out.println();
  28.                         }
  29.                 }
  30.         }
  31.         public static void sop(Object obj)
  32.         {
  33.                 System.out.print(obj+" ");
  34.         }
  35. }

复制代码
[/code]

0$(MH46PYD6]$)9I1{20)5X.jpg (8.37 KB, 下载次数: 74)

0$(MH46PYD6]$)9I1{20)5X.jpg

作者: 逆袭的风    时间: 2013-8-7 21:15
完成如下:
  1. /*
  2. 设计一个程序是求9999以内的“自身数”,并打印出其所有约数。所谓自身数是指这样的自然数:它的各个约数(不包括该数自身)之和等于该数自身。
  3. 要求:打印需满足以下格式。
  4. A:约数1  约数2  约数3......   例如 6: 1   2   3  
  5. B:约数1  约数2  约数3......        28: 1   2   4   7   14
  6. C:约数1  约数2  约数3......        496: 1   2   4   8   16   31   62   124   248

  7. */

  8. class PanDuan
  9. {
  10.         public static void ziShenShu()
  11.         {
  12.                 for (int i=2;i<=9999 ;i++ )
  13.                 {
  14.                         int sum=0;
  15.                         for (int j=1;j<=i/2 ;j++ )//一个数的约数最大为其自身的一半
  16.                         {
  17.                                 if (i%j==0)
  18.                                 {
  19.                                 sum+=j;
  20.                                 }
  21.                                 else
  22.                                 {
  23.                                         continue;
  24.                                 }
  25.                         }
  26.                         if (sum==i)//如果是自身数则按规定打印
  27.                         {       
  28.                                 System.out.print(i+":  ");//先打印这个数   i:
  29.                                 for (int j=1;j<=i/2 ;j++ )
  30.                                 {
  31.                                         if (i%j==0)
  32.                                         {
  33.                                                 System.out.print(j+"   ");//打印每个因子
  34.                                         }
  35.                                 }
  36.                                 System.out.println();//当每个数打完后换行
  37.                         }
  38.                        
  39.                 }
  40.         }
  41. }

  42. class  ZiShenShu
  43. {
  44.         public static void main(String[] args)
  45.         {
  46.                 PanDuan a=new PanDuan();
  47.                 a.ziShenShu();
  48.         }
  49. }
复制代码
输出如图:

Unnamed.png (50.69 KB, 下载次数: 56)

Unnamed.png

作者: 夜空闪亮    时间: 2013-8-7 22:12
求9999以内的所有自身数的代码如下:
  1. class  SearchItselfNumber
  2. {
  3.         public static void main(String[] args)
  4.         {
  5.                 for(int i = 2;i<10000;i++)
  6.                 {
  7.                         searchNum(i);
  8.                 }
  9.         }
  10.        
  11.         //寻找自身数并打印输出
  12.         public static void searchNum(int num)
  13.         {
  14.                 int sum = 0;
  15.                 for(int i = 1;i<num;i++)
  16.                         if(num%i==0)
  17.                         {
  18.                                 sum+=i;
  19.                         }
  20.                 if(sum==num)
  21.                 {
  22.                         System.out.print(num+" : ");
  23.                         for(int i = 1;i<num;i++)
  24.                                 if(num%i==0)
  25.                                         System.out.print(i+"  ");
  26.                         System.out.println();
  27.                 }
  28.         }
  29. }
复制代码
程序运行结果截图如下:

自身数.jpg (15.1 KB, 下载次数: 67)

自身数.jpg

作者: 黑马李昂    时间: 2013-8-7 23:53
  1. package heima;
  2. /*
  3. * 需求:
  4. * 设计一个程序是求9999以内的“自身数”,并打印出其所有约数。
  5. * 所谓自身数是指这样的自然数:它的各个约数(不包括该数自身)之和等于该数自身。
  6. * 如28=1+2+4+7+14就是一个完全数。要求:打印需满足以下格式。

  7. A:约数1 约数2 约数3...... 例如 6: 1 2 3
  8. B:约数1 约数2 约数3...... 28: 1 2 4 7 14
  9. C:约数1 约数2 约数3...... 496: 1 2 4 8 16 31 62 124 248


  10. */
  11. public class MathDemo {
  12. public static void main(String[] args) {
  13. System.out.print("9999以内的自身数有:");
  14. for(int i=1;i<9999;i++){
  15. if(perfert(i)!=0)//调用perfert方法
  16. System.out.print(" "+perfert(i));
  17. }
  18. }
  19. //将判断为自身数的条件封装成一个方法
  20. public static int perfert(int m){
  21. int num=0;
  22. for(int i=1;i<m;i++){
  23. if(m%i==0)
  24. num=num+i;
  25. }
  26. if(num==m)
  27. return m;
  28. else
  29. return 0;
  30. }
  31. }
复制代码

作者: 牛牛    时间: 2013-8-8 09:37


/**
* 设计一个程序是求9999以内的“自身数”,并打印出其所有约数。所谓自身数是指这样的自然数:它的各个约数(不包括该数自身)之和等于该数自身。
如28=1+2+4+7+14就是一个完全数。要求:打印需满足以下格式。   

               A:约数1  约数2  约数3......   例如 6: 1   2   3  
               B:约数1  约数2  约数3......         28: 1   2   4   7   14
               C:约数1  约数2  约数3......        496: 1   2   4   8   16   31   62   124   248

* @author Administrator
*
*/
public class Exercise_5 {
       
        public static void main(String[] args) {
                getAllApproximate(6);
                System.out.println();
                getAllApproximate(28);
                System.out.println();
                getAllApproximate(496);
                System.out.println();
        }
        /**
         * 获得num的约数(不包括该数自身)
         * @param num
         */
        public static void getAllApproximate(int num){
                System.out.print(num+":");
                for (int i = 1; i <= num/2; i++) {
                        if(num%i==0){
                                System.out.print(i+"\t");
                        }
                }
        }
       
}
作者: lvjayj    时间: 2013-8-8 11:29
  1. import java.util.ArrayList;


  2. public class test {

  3.         public static void main(String[] args) {
  4.                
  5.                  int num;
  6.          int i;
  7.          for(num=1;num<=9999;num++) //循环9999内的整数
  8.          {
  9.                  int sum = 0; //用于求和
  10.                  ArrayList<Integer> list = new ArrayList<Integer>(); //用于存放约数
  11.                  for(i=1;i<=num/2;i++) //循环判断
  12.                  {
  13.                          if(num%i==0) //是否为约数
  14.                          {
  15.                                  list.add(i);  //如果是加到list中
  16.                               sum=sum+i; //累加
  17.                          }
  18.                  }
  19.                  if(sum == num)  //如果是自身数,则输出
  20.                  {
  21.                          System.out.print(num+":"); //输出自身数
  22.                          for(int j = 0;j < list.size(); j ++) //输出约数
  23.                          {
  24.                          System.out.print(list.get(j)+" ");
  25.                          }
  26.                          System.out.println();
  27.                  }
  28.          }
  29.         }
  30. }
复制代码
输出结果:
6:1 2 3
28:1 2 4 7 14
496:1 2 4 8 16 31 62 124 248
8128:1 2 4 8 16 32 64 127 254 508 1016 2032 4064


作者: jrry    时间: 2013-8-8 12:02
  1. import java.util.ArrayList;
  2. import java.util.List;

  3. /**
  4. * 求9999以内的“自身数”,并打印出其所有约数。 所谓自身数是指这样的自然数:它的各个约数(不包括该数自身)之和等于该数自身。
  5. *
  6. * @author jerry
  7. *
  8. *         思路:求一个数的所有约数:因为一个数的所有约数在1和这个数本身之间(
  9. *         包括1和这个数本身),所以1到这个数之间的所有数取余为0的数为这个数的约数,
  10. *         先求出一个数的所有约数,如果这个数的所有约数之和减去这个数本身等于这个数,则此数为自身数,
  11. */
  12. public class GetSelfNum {

  13.         public static void main(String[] args) {
  14.                 // 有思路中分析可知0和1不是自身数
  15.                 for (int i = 2; i < 9999; i++) {
  16.                         isSelfNum(i);
  17.                 }
  18.         }

  19.         /**
  20.          * 判断一个数是否为自身数,如果是则打印出来,并打印它的约数
  21.          *
  22.          * @param num
  23.          *            需要判断的数
  24.          * @return true Or false
  25.          */
  26.         public static boolean isSelfNum(int num) {
  27.                 // boolean标记 记录是否是自身数 作为返回值
  28.                 boolean flag = false;

  29.                 // 一个数的除了本身外的所有约数的和,初始化为0
  30.                 int sum = 0;
  31.                 // 定义一个集合,存放一个数的除了本身外的所有约数
  32.                 List<Integer> list = new ArrayList<Integer>();

  33.                 for (int i = 1; i < num; i++) {
  34.                         // 循环判断获取这个数的约数
  35.                         if (num % i == 0) {
  36.                                 // 除了这个数本身外的所有约数相加的和赋给sum
  37.                                 sum = sum + i;
  38.                                 // 存入集合
  39.                                 list.add(i);
  40.                         }
  41.                         // 判断是否为自身数
  42.                         if (num == sum)

  43.                                 flag = true;
  44.                 }
  45.                 if (!flag)

  46.                         return flag;
  47.                
  48.                 System.out.print(sum + " : ");
  49.                 for (int i = 0; i < list.size(); i++) {
  50.                         System.out.print(list.get(i) + " ");
  51.                 }
  52.                 System.out.println();
  53.                 return flag;
  54.         }
  55. }
复制代码

作者: 熊纪达    时间: 2013-8-8 12:05
  1. import java.util.*;
  2. class Demo
  3. {
  4.         public static void main(String[] args)
  5.         {
  6.                 TreeSet<Integer> ts=new TreeSet<Integer>();
  7.                 int sum=0;
  8.                 boolean flag=false;
  9.                 for (int i=1;i<10000;i++ )
  10.                 {
  11.                         for (int j=1;j<=(i/2) ;j++ )
  12.                         {
  13.                                 if((i%j)==0)
  14.                                         ts.add(j);
  15.                         }
  16.                         if(ts.isEmpty())
  17.                                 continue;
  18.                         else
  19.                         {
  20.                                 for(Integer x :ts)
  21.                                 {
  22.                                         sum+=x;
  23.                                 }
  24.                                 if(sum==i)
  25.                                 {
  26.                                         System.out.print(i+": ");
  27.                                         for(Integer x:ts)
  28.                                         {
  29.                                                 System.out.print(x+" ");
  30.                                         }
  31.                                         System.out.println("");               
  32.                                 }
  33.                                 sum=0;
  34.                                 ts.clear();       
  35.                         }
  36.                 }
  37.         }
  38. }
复制代码

作者: 白堇翎    时间: 2013-8-8 12:19
  1. package day16;

  2. import java.io.BufferedReader;
  3. import java.io.IOException;
  4. import java.io.InputStreamReader;
  5. import java.util.ArrayList;
  6. import java.util.Iterator;
  7. import java.util.List;

  8. /*
  9. * 需求:
  10. *                         设计一个程序是求9999以内的“自身数”,并打印出其所有约数。所谓自身数是指这样的自然数:它的各个约数(不包括该数自身)之和等于该数自身。
  11. *                        如28=1+2+4+7+14就是一个完全数。要求:打印需满足以下格式。   
  12. *
  13. *                         A:约数1  约数2  约数3......   例如 6: 1   2   3  
  14. *                        B:约数1  约数2  约数3......         28: 1   2   4   7   14
  15. *                        C:约数1  约数2  约数3......        496: 1   2   4   8   16   31   62   124   248
  16. *
  17.         逻辑分析:
  18.        
  19.                         1.首先要知道该数字的约数是哪几个数字
  20.                         2.做一次判断,判断约数之和是否为这个数字本身.若是,打印
  21.         功能分析:
  22.                         1.新建一个类,此类中共有3个私有方法.和一个公共方法
  23.                         2.方法1用来获取用户输入的数字.
  24.                                 2.1用正则判断该数字是否符合标准,若为否,则提示用户重新输入
  25.                         3.方法2用来获取该数字的所有约数,并存入集合
  26.                                 3.1可以让该数%2,%3,%4,依次类推,若为零,则往集合添加.
  27.                         4.方法3用来迭代集合求和
  28.                         5.方法4对外提供以上所有方法
  29. */
  30. public class ActTest2 {
  31.         public static void main(String[] args) {
  32.                 getNum get = new getNum();
  33.                 get.run();
  34.         }
  35. }

  36. class getNum {
  37.         public void run(){
  38.                 showUnum(GetList(GetNum()), num);
  39.         }
  40.        
  41.         private int num = 0;
  42.        
  43.         private int GetNum() {
  44.                 BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
  45.                 String buf = null;
  46.                 String regex = "[1-9][0-9]{0,3}";
  47.                 try {
  48.                         System.out.println("请输入一个数字");
  49.                         while ((buf = br.readLine()) != null) {
  50.                                 if(buf.matches(regex))
  51.                                         return num = Integer.parseInt(buf);
  52.                                 System.out.println("输入了一个非法数字,请重新输入");
  53.                         }

  54.                 } catch (Exception e) {
  55.                         // TODO Auto-generated catch block
  56.                         System.out.println("发生了一个错误,请检查");
  57.                 }
  58.                 finally{
  59.                         try {
  60.                                 br.close();
  61.                         } catch (IOException e) {
  62.                                 // TODO Auto-generated catch block
  63.                                 System.out.println("关闭流失败");
  64.                         }
  65.                 }
  66.                 return -1;
  67.         }
  68.         private List GetList(int num){
  69.                 List list = new ArrayList();
  70.                 int temp  = num - 1;
  71.                 while(temp > 0){
  72.                         if(num%temp == 0)
  73.                                 list.add(temp);
  74.                         temp--;
  75.                 }
  76.                 return list;
  77.         }
  78.         private void showUnum(List list,int num){
  79.                 Iterator it = list.iterator();
  80.                 int temp = 0;
  81.                 int buf = 0;
  82.                 String str = "";
  83.                 String buff = "";
  84.                 while(it.hasNext()){
  85.                         buf = (int)it.next();
  86.                         temp = temp + buf;
  87.                         str = str+buf+"*";
  88.                 }
  89.                 str = str.substring(0, str.length()-1)+"="+num;
  90.                 System.out.println(str);
  91.                 if(temp == num)
  92.                         System.out.println(num+"是一个自身数");
  93.                 else
  94.                         System.out.println(num+"不是一个自身数");
  95.         }
  96. }
复制代码

作者: EYE_SEE_YOU    时间: 2013-8-8 13:11
这不是代码,代码我还写不出来,这里我就表达一下菜鸟的思路
设自身数变量为int y=6//因为6是0-9999以内的第一个自身数,我就直接从这里开始好了
设约数变量为int x=1
设一个数组int []arg=int [9999]
两个控制数组的变量 int i=0,int j=0
数组和的变量int sum =0

首先来个外循环,当y<=9999的时候就进入循环,整个循环后y++
   接着内循环,x<y的时候进入循环,循环后x++
      进行判断y%x==0,如果为真就用数组[i]记住x,数组和+=数组[i],i++
          最后再判断是否数组和于y相等,如果相等,就换行打印y并进入最后一个输出循环
              每当j<=i就输出数组[j]\t
        
作者: 李江    时间: 2013-8-8 14:36
本帖最后由 graspDN 于 2013-8-8 14:39 编辑
  1. class yueshu
  2. {
  3.         public static void main(String[] args)
  4.         {
  5.                 for(int i=1;i<=9999;i++)
  6.                 {
  7.                         int[] arr = new int[i/2];
  8.                         int m=0;
  9.                         for(int j=1;j<i;j++)
  10.                         {
  11.                                 
  12.                                 if(i%j==0)
  13.                                 {
  14.                                         arr[m++]=j;
  15.                                 }
  16.                         }
  17.                         int sum = 0;

  18.                         for(int k=0;k<arr.length;k++)
  19.                         {
  20.                                 sum+=arr[k];        
  21.                         }

  22.                         if(sum == i)
  23.                         {
  24.                                 System.out.print(i+": ");
  25.                                 for(int k=0;k<arr.length;k++)
  26.                                 {
  27.                                         if(arr[k]==0)
  28.                                                 break;
  29.                                         System.out.print(arr[k]+" ");
  30.                                 }
  31.                                 System.out.println("");
  32.                         }

  33.                 }
  34.         }
  35. }
复制代码

作者: 肥猪    时间: 2013-8-8 17:29
  1. import java.util.ArrayList;
  2. import java.util.Iterator;

  3. /*
  4. * 设计一个程序是求9999以内的“自身数”,并打印出其所有约数。所谓自身数是指这样的自然数:它的各个约数(不包括该数自身)之和等于该数自身。
  5. 如28=1+2+4+7+14就是一个完全数。要求:打印需满足以下格式。   

  6.                A:约数1  约数2  约数3......   例如 6: 1   2   3  
  7.                B:约数1  约数2  约数3......         28: 1   2   4   7   14
  8.                C:约数1  约数2  约数3......        496: 1   2   4   8   16   31   62   124   248

  9. */

  10. public class Second {
  11.         public static void main(String[] args) {
  12.                
  13.                 for(int x= 1;x<9999;x++) //给number方法传值
  14.                         number(x);
  15.                
  16.         }
  17.        
  18.         public static void number(int num)
  19.         {
  20.                 ArrayList<Integer> arr = new ArrayList<Integer>();        //ArrayList集合用来存放约数
  21.                 int sum=0;//约数的和
  22.                 for(int x=1;x<num;x++) //判断是否是约数
  23.                 {
  24.                         if(num % x==0)
  25.                                 arr.add(x); //如果是添加到集合中
  26.                 }
  27.                
  28.                 Iterator<Integer> it = arr.iterator(); //迭代器
  29.                
  30.                 while(it.hasNext()) //遍历
  31.                 {
  32.                         sum = sum +it.next(); //求和
  33.                         //System.out.print(it.next()+" ");
  34.                 }
  35.                 it=arr.iterator(); //更新迭代器
  36.                 if(sum == num) //如果是自身数则打印该数及其约数
  37.                 {
  38.                         System.out.print(num+": ");
  39.                         while(it.hasNext())
  40.                         {
  41.                                 System.out.print(it.next()+" ");
  42.                         }
  43.                         System.out.println();
  44.                 }
  45.                
  46.                 arr.clear();//清空集合
  47.                
  48.         }
  49. }
复制代码

作者: liye20110    时间: 2013-8-8 18:11
  1. public class Wanshu {

  2.          public static void main(String[] args) {
  3.         //定义一个int型变量,用来表示约数和
  4.        int sum;
  5.        //循环遍历1到9999以内的数
  6.        for(int num=1;num<9999;num++){
  7.                   //每遍历一个数都要将约数和置0,否则下一个数的约数和会在加上上一个和
  8.                  sum=0;
  9.                 for(int i=1;i<num;i++){
  10.                        //求出num的约数
  11.                       if(num%i==0)
  12.                       //求约数和
  13.                        sum+=i;
  14.                  }
  15.                //如果该数的约数和等于他本身,就将他的约数打印
  16.               if(sum==num){
  17.                     System.out.print(num+":");
  18.                    for(int j=1;j<num;j++){
  19.                          if(num%j==0)
  20.                                System.out.print(j+"  ");
  21.                   }
  22.                  System.out.println();
  23.               }
  24.          }
  25.      }
  26. }
复制代码
结果:










作者: taotao    时间: 2013-8-8 18:39
  1. class  hehe
  2. {
  3.         public static void main(String[] args)
  4.         {
  5.                 for(int i=2;i<10000;i++)
  6.                 {
  7.                         int a = 0;
  8.                         for(int j=1;j<i;j++)
  9.                         {
  10.                                 if(i%j==0)
  11.                                         a+=j;
  12.                         }
  13.                         if(a==i)
  14.                         {
  15.                                 System.out.print(i+" : ");
  16.                                 for(int j=1;j<i;j++)
  17.                                 {
  18.                                         if(i%j==0)
  19.                                                 System.out.print(j+" ");
  20.                                 }
  21.                                 System.out.println(" ");
  22.                         }
  23.                 }               
  24.         }
  25. }
复制代码

作者: breaveheart    时间: 2013-8-8 20:08
  1. class  WanQuanShu
  2. {
  3.        
  4.         public static void main(String[] args)
  5.         {
  6.                 int b;

  7.                 for (int a=2; a<=9999; a++)
  8.                 {
  9.                         int sum = 0;
  10.                         for (b=1; b<a; b++)
  11.                         {
  12.                                 if (a%b==0)
  13.                                         sum = sum + b;
  14.                         }
  15.                         if (a==sum)
  16.                         {
  17.                                 System.out.print(a+": ");
  18.                                 for (b=1; b<a; b++)
  19.                                 {
  20.                                         if (a%b==0)
  21.                                                 System.out.print(b+" ");

  22.                                 }
  23.                                 System.out.println();
  24.                                
  25.                         }
  26.                 }
  27.                
  28.         }
  29. }
复制代码

作者: 钟佩桓    时间: 2013-8-9 01:12
  1. package test;
  2. /*
  3. * 设计一个程序是求9999以内的“自身数”,并打印出其所有约数。所谓自身数是指这样的自然数:它的各个约数(不包括该数自身)之和等于该数自身。
  4. 如28=1+2+4+7+14就是一个完全数。要求:打印需满足以下格式。   

  5.                A:约数1  约数2  约数3......   例如 6: 1   2   3  
  6.                B:约数1  约数2  约数3......         28: 1   2   4   7   14
  7.                C:约数1  约数2  约数3......        496: 1   2   4   8   16   31   62   124   248


  8. * */
  9. public class JavaTest {

  10.         /**
  11.          * 思路:1,求自身数  这个数必须是2的倍数
  12.          * 2,自身数要等于自己的约数和 那么将这个数除以2 将除以得到的数相加如果等于这个数 那么这个数就自身数
  13.          * 3,得到自身数后用一个for循环来打印它的约数 约数即是这个数除以2得到的数 前提是这个数能整除2
  14.          * 4,1也是一个自身数 1的约数是1
  15.          */
  16.         public static void main(String[] args) {
  17.                 // TODO Auto-generated method stub
  18.                 System.out.println("10以内的自身数和它的约数为:");
  19.                 getMyNumber();
  20.                
  21.                
  22.         }
  23.         //获取9999以内的自身数以及它的约数
  24.         public static void getMyNumber(){
  25.                 System.out.println(1+":"+1);
  26.                 for(int x=2;x<=9999;x++){
  27.                         int sum =0;
  28.                         for(int y=2;y<=x;y++){
  29.                                 if(x%y==0){
  30.                                         sum += x/y;
  31.                                 }               
  32.                         }
  33.                         if(sum==x){
  34.                                 System.out.print(x+":");
  35.                                 for(int i=2;i<=x;i++){
  36.                                         if(x%i==0)
  37.                                         System.out.print(x/i+" ");
  38.                                 }
  39.                                 System.out.println("");
  40.                         }
  41.                        
  42.                 }
  43.         }
  44. }
复制代码

作者: 黄兴旺    时间: 2013-8-9 01:26
  1. public class wzs {
  2.         public static void main(String[] args){
  3.                 int sum=0;
  4.                 for(int i=1;i<9999;i++){
  5.                         sum=0;
  6.                         for(int j=1;j<=i/2;j++){
  7.                                 if(i%j==0){
  8.                                         sum+=j;
  9.                                 }
  10.                         }
  11.                         if(sum==i){
  12.                                 System.out.print(i+":"+"\t");
  13.                                 for(int j=1;j<=i/2;j++){
  14.                                         if(i%j==0){
  15.                                                 System.out.print(j+" ");
  16.                                         }
  17.                         }
  18.                                 System.out.println();
  19.                 }
  20.         }
  21. }
  22. }
复制代码

QQ截图20130809012404.jpg (12.54 KB, 下载次数: 30)

QQ截图20130809012404.jpg

作者: 茶念小手    时间: 2013-8-9 04:44
  1. import java.util.ArrayList;
  2. import java.util.List;


  3. public class Number {

  4.         /**
  5.          * @param args
  6.          */
  7.         public static void main(String[] args) {

  8.                 int sum = 0;
  9.                 List<Integer> arr= new ArrayList<Integer>(); ;
  10.                 for(int i =1; i < 10000;i++)
  11.                 {       
  12.                         for (int j = 1; j <= i; j++) {
  13.                                 if (i % j ==0) {
  14.                                         arr.add(j);
  15.                                 }
  16.                         }
  17.                         for (int s =0; s<arr.size()-1;s++) {
  18.                                
  19.                                 sum+=arr.get(s);
  20.                         }
  21.                         if (sum==i&& i!=0) {
  22.                                
  23.                                 System.out.print(sum+":");
  24.                                 for (int s =0; s<arr.size()-1;s++) {
  25.                                        
  26.                                         System.out.print("  "+arr.get(s));
  27.                                 }
  28.                                 System.out.println();
  29.                         }
  30.                         sum = 0;
  31.                         arr.clear();
  32.                 }
  33.                
  34.                

  35.         }

  36. }
复制代码

作者: gudao20080    时间: 2013-8-9 12:35
  1. package com.itcast.mapTest;
  2. import java.util.*;
  3. public class CollSelfNum {

  4.         public static void main(String[] args) {
  5.                 // TODO Auto-generated method stub
  6.                 /*
  7.                  * A:约数1  约数2  约数3......   例如 6: 1   2   3   
  8.                  */
  9.                 for(int k = 2 ; k <= 9999; k++){
  10.                         prinSelfArr(k);                               
  11.                 }       
  12.         }
  13.         public static void prinSelfArr(int num){
  14.                 Set<Integer> arrSet = new TreeSet<Integer>();//建立TreeSet集合,用来存放整数
  15.                 for(int i = 1; i < num; i++){
  16.                         for(int j = i+1; j <= num; j++){  
  17.                                 if(num == i*j ){    //判断两个数之积是否满足条件
  18.                                         arrSet.add(i);
  19.                                         arrSet.add(j);
  20.                                 }
  21.                         }
  22.                 }
  23.                 arrSet.remove(num);   //移除 num这个数,方便计算其它所有数的和
  24.                
  25.                 //计算所有除去num后的约数之和
  26.                 int sum = 0;
  27.                 for(Integer x: arrSet){
  28.                         //System.out.print(x+"  ");
  29.                         sum += x;
  30.                 }
  31.                 if(sum == num){       //判断约数之和与num是否相等
  32.                         System.out.print(num+": ");
  33.                         for(Integer x: arrSet){   //for循环输出集合中num的约数
  34.                                 System.out.print(x+"  ");
  35.                         }
  36.                         System.out.print(num+"\r\n");
  37.                 }               
  38.         }
  39. }
复制代码

作者: 黄兴旺    时间: 2013-8-9 13:14
黄兴旺 发表于 2013-8-9 01:26

老田..你还是实习版主?
作者: 陈贺    时间: 2013-8-9 17:08
本帖最后由 陈贺 于 2013-8-9 17:13 编辑
  1. <p> </p><div class="blockcode"><blockquote>package com.itheima;


  2. public class Test {

  3.         /**
  4.          * @param args
  5.          */
  6.         public static void main(String[] args) {
  7.                 for(long i=6;i<9999;i++){
  8.                         long x = 0;
  9.                         for(long y=1;y<i;y++){
  10.                                 if(i%y==0){
  11.                                        
  12.                                         x+=y;
  13.                                 }       
  14.                         }       
  15.                         if(x==i){
  16.                                 System.out.print(i+":");
  17.                                 for(long y=1;y<i;y++){
  18.                                         if(i%y==0){
  19.                                                 System.out.print(" "+y);       
  20.                                         }       
  21.                                 }
  22.                                 System.out.println();
  23.                         }
  24.                 }
  25.         }
  26. }
复制代码

作者: 罗广伟    时间: 2013-8-9 17:31
本帖最后由 罗广伟 于 2013-8-9 17:33 编辑
  1. import java.util.*;
  2. public class SelfNumber {
  3.         public static void main(String[] args)
  4.         {
  5.                 for(int x=1;x<9999;x++)//遍历0-9999
  6.                 {
  7.                         List<Integer> al=new ArrayList<Integer>();//定义集合用于存储x的约数
  8.                         for(int y=1;y<x;y++)//取出x的约数,并存到集合
  9.                         {
  10.                                 if(x%y==0)
  11.                                         al.add(y);
  12.                         }
  13.                         int sum=0;
  14.                         for(int z=0;z<al.size();z++)//将x约数进行相加
  15.                         {
  16.                                 sum=sum+al.get(z);
  17.                         }
  18.                         if(x==sum)//判断约数和和自身是否相等
  19.                         {
  20.                                 System.out.println(x+":"+getElements(al));
  21.                         }
  22.                         
  23.                 }
  24.         }
  25.         public static StringBuffer getElements(List al)//将中括号去掉
  26.         {
  27.                 Iterator<Integer> it=al.iterator();
  28.                 StringBuffer sb=new StringBuffer();
  29.                 while(it.hasNext())
  30.                 {
  31.                         sb.append(" "+it.next());
  32.                 }
  33.                 return sb;
  34.         }
  35. }
复制代码

作者: 六石_01    时间: 2013-8-9 18:14
import java.util.*;
public class ZiShenShu
{
        public static void main(String[] args)
        {
                ArrayList al = new ArrayList();

                for (int i=2;i<10000 ;i++ )
                {
                        int tmp=0;
                        for(int j=1;j<i;j++)
                        {
                                if (i%j==0)
                                        tmp+=j;                               
                        }
                        if(i==tmp)
                        {
                                al.add(new Integer(i));
                        }
                }
                Iterator it = al.iterator();
                while(it.hasNext())
                {
                        Integer intObj=(Integer)it.next();
                        int c=intObj.intValue();
                        System.out.print(c+":"+"\t");
                        for (int j=1;j<c ;j++ )
                        {
                                if(c%j==0)
                                        System.out.print(j+"   ");
                        }
                        System.out.println();
                }
        }
}


作者: 捌年    时间: 2013-8-9 18:23
  1. /**
  2. 1、在循环中找出自身数
  3. 2、打印自身数及其约数
  4. */
  5. public class Demo
  6. { //找出自身数
  7. public static void findNum()
  8. {
  9. for(int j = 2 ; j<=9999 ; j++)
  10. {
  11. int temp = 0 ;
  12. for(int i = 1 ; i<j ; i++)
  13. {
  14. if(j%i == 0)
  15. temp += i ;
  16. }
  17. if(temp == j)
  18. print(j) ;
  19. }
  20. }

  21. //按照格式打印自身数
  22. public static void print(int x)
  23. {
  24. System.out.print(x + ": ") ;
  25. for(int i = 1 ; i<x ; i++)
  26. {
  27. if(x%i == 0 )
  28. System.out.print(i + " ") ;
  29. }
  30. System.out.println() ;
  31. }
  32. public static void main(String[] args)
  33. {
  34. findNum() ;
  35. }
  36. }
复制代码

作者: lvjayj    时间: 2013-8-9 20:19
  1. import java.util.ArrayList;


  2. public class test {

  3.         public static void main(String[] args) {
  4.                
  5.                  int num;
  6.          int i;
  7.          for(num=1;num<=9999;num++) //循环9999内的整数
  8.          {
  9.                  int sum = 0; //用于求和
  10.                  ArrayList<Integer> list = new ArrayList<Integer>(); //用于存放约数
  11.                  for(i=1;i<=num/2;i++) //循环判断
  12.                  {
  13.                          if(num%i==0) //是否为约数
  14.                          {
  15.                                  list.add(i);  //如果是加到list中
  16.                               sum=sum+i; //累加
  17.                          }
  18.                  }
  19.                  if(sum == num)  //如果是自身数,则输出
  20.                  {
  21.                          System.out.print(num+":"); //输出自身数
  22.                          for(int j = 0;j < list.size(); j ++) //输出约数
  23.                          {
  24.                          System.out.print(list.get(j)+" ");
  25.                          }
  26.                          System.out.println();
  27.                  }
  28.          }
  29.         }
  30. }
复制代码

作者: 米中之玉    时间: 2013-8-9 22:01
  1. package others;

  2. public class FreeNumber {

  3.         public static void main(String[] args) {
  4.                 // TODO 自动生成方法存根
  5.                 //声明max为所要求的最大值范围。
  6.                 int max = 9999;
  7. //                调用函数,并打印结果。
  8.                 getFreeNumber(max);
  9.         }
  10. //定义函数,求得所给范围内的“自身数”。
  11.         public static void getFreeNumber(int max) {
  12.                 for (int m = 2; m <= max; m++) {
  13.                         String str = m + ":\t";
  14.                         int sum = 0;
  15.                         int mid = m/2 +1;
  16.                         //因为一个数肯定不能被他的一半mid以后的数整除,所以循环到mid就可以。
  17.                         for (int n = 1; n < mid; n++) {
  18.                                 if (m % n == 0) {
  19.                                         sum += n;
  20.                                         str = str + n + "\t";
  21.                                 }
  22.                         }
  23.                         if (m == sum)
  24.                                 System.out.println(str);
  25.                 }
  26.         }

  27. }
复制代码

作者: 木偶_freedom    时间: 2013-8-10 14:34
  1. class Test
  2. {
  3.         public static void main(String[] args)
  4.         {
  5.                 for(int i=1; i<9999; i++)
  6.                 {
  7.                         int sum=0;
  8.                         int j;
  9.                         for(j=1; j<i; j++)
  10.                         {
  11.                                 if(i%j==0) //判断出约数
  12.                                 {
  13.                                         sum += j;        //求出约数之和
  14.                                 }
  15.                         }
  16.                         if(sum == i)        //判断约数之和是否与数字本身相同
  17.                         {
  18.                                 System.out.print(sum + ":" );//打印自身数
  19.                                 for(int z=1; z<=sum/2; z++)//打印约束
  20.                                 {
  21.                                        
  22.                                         if(sum%z==0)
  23.                                         {
  24.                                                 System.out.print(z + "  ");
  25.                                         //System.out.println();
  26.                                         }
  27.                                 }
  28.                                 System.out.println();
  29.                         }
  30.                 }
  31.         }
  32. }
复制代码





欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2