1. import java.util.ArrayList; 
  2. import java.util.List; 
  3.  
  4. public class Test { 
  5.  
  6.     /** 
  7.      * @param args 
  8.      */ 
  9.     public static void main(String[] args) { 
  10.         // TODO Auto-generated method stub 
  11.         /** 
  12.          * 真因子算法 除了自己 所有能被自己整除的正数相加等于自己本身 
  13.          */ 
  14.          List<Integer> answer = new ArrayList<Integer>(); 
  15.          
  16.          for (int max = 10000; max > 1; max--) { 
  17.          int temp[] = new int[max]; 
  18.          int index = 0
  19.          int result = 0
  20.          for (int i = 1; i < max; i++) { 
  21.          int c = max % i; 
  22.          if (c == 0) { 
  23.          temp[index] = i; 
  24.          index++; 
  25.          // System.out.println(i); 
  26.          } 
  27.          
  28.          } 
  29.          for (int i = 0; i < temp.length; i++) { 
  30.          result = result + temp[i]; 
  31.          } 
  32.          if (result == max) { 
  33.          answer.add(max); 
  34.          } 
  35.          // System.out.println("---------------------------------"); 
  36.          } 
  37.          
  38.          for (int i = 0; i < answer.size(); i++) { 
  39.          int num = answer.get(i); 
  40.          System.out.println(num); 
  41.          } 
  42.          Integer[] s=answer.toArray(new Integer[0]); 
  43.  
  44.         /** 
  45.          * 有两个数组a,b,大小都为n,数组元素的值任意,无序; 要求:通过交换a,b中的元素,使数组a元素的和与数组b元素的和之间的差最小 
  46.          */ 
  47.         int n = 10
  48.         int a[] = { 23133141312345667522513520 }; 
  49.         int b[] = { 2124131345366175225515 }; 
  50.  
  51.         int totala = 0
  52.         int totalb = 0
  53.         int distance; 
  54.  
  55.         int aminIndex = 0
  56.         int bminIndex = 0
  57.         for (int i = 0; i < n; i++) { 
  58.             totala = totala + a[i]; 
  59.             totalb = totalb + b[i]; 
  60.         } 
  61.         boolean transform = false
  62.  
  63.         System.out.println("數組A的和:" + totala); 
  64.         System.out.println("數組B的和:" + totalb); 
  65.         distance = totala - totalb; 
  66.         if (distance == 0) { 
  67.             System.out.println("int a[]=int b[]"); 
  68.         } else { 
  69.             if (distance < 0) { 
  70.                 int temp[] = a; 
  71.                 a = b; 
  72.                 b = temp; 
  73.                 transform = true
  74.             } 
  75.             int min = totala; 
  76.  
  77.             int j; 
  78.             for (j = 0; j < n; j++) { 
  79.                 int k = 0
  80.                 while (k < n) { 
  81.                     int change = a[j] - b[k]; 
  82.                     if ((2 * change) == Math.abs(distance)) { 
  83.                         int temp = a[j]; 
  84.                         a[j] = b[k]; 
  85.                         b[k] = temp; 
  86.                         break
  87.                     } else { 
  88.                         if (change > 0&& (Math.abs((2 * change) - Math.abs(distance)) < min)) { 
  89.                             min = Math.abs((2 * change) - Math.abs(distance)); 
  90.                             aminIndex = j; 
  91.                             bminIndex = k; 
  92.                         } 
  93.                         k++; 
  94.                     } 
  95.                 } 
  96.                  
  97.             } 
  98.  
  99.             if (transform == true) { 
  100.                 System.out.println("數組A中值为:" + b[bminIndex ]+",下标为"+bminIndex + 
  101.                         "的数与數組B中值为:"+ a[aminIndex ]+",下标为"+aminIndex+ "的数互换,數組A与 B的差最小");                
  102.             } else { 
  103.                 System.out.println("數組A中值为:" + a[aminIndex ]+",下标为"+aminIndex + 
  104.                         "的数与數組B中值为:"+ b[bminIndex ]+",下标为"+bminIndex+ "的数互换,數組A与 B的差最小"); 
  105.             } 
  106.         } 
  107.  
  108.     } 
  109.