/*  * 一个有序数列,序列中的每一个值都能够被2或者3或者5所整除,  * 1是这个序列的第一个元素。求第1500个值是多少? 
 * 这道题目当时面试的时候用了一个很笨的方法。真的很糗。呵呵!:) 
 * 这个类用来计算这个序列的第n个元素的值。  *   */ package bia.arithmetic; import java.util.Date; 
 /**  * @author Renzhichao  */ public class NextItem { 
 /**   *    */  public NextItem() {   super();   // TODO Auto-generated constructor stub   array[0] = 1;     posX = 0;   posY = 0;   posZ = 0;   itemPos = 0;     cal();  } 
   void cal() {   valX = 2 * array[posX];   valY = 3 * array[posY];   valZ = 5 * array[posZ];  } 
 long array[] = new long[1500];  int posX, posY, posZ;  long valX, valY, valZ;  int itemPos; 
 /**   * 计算序列中的下一个元素   * @Renzhichao   *   */  public void nextItem() {   long min = valX;   boolean flagX = false ;         boolean flagY = false ;         boolean flagZ = false ;            if (valY < min) {    min = valY;     }   if (valZ < min) {    min = valZ;      }                          if (min==valX){             flagX = true ;         }         if (min==valY){             flagY = true ;         }         if (min==valZ){             flagZ = true ;         }            if (min > array[itemPos]) {             itemPos++;             array[itemPos] = min ;    if (flagX) posX++ ;             if (flagY) posY++ ;             if (flagZ) posZ++ ;   }         cal() ;  } 
    /**      * 得到这个序列中的第n个元素      * @Renzhichao      * @param no      * @return      */     public long getItem(int no){         for (int i = 0; i < (no-1); i++) {    nextItem() ;   }         return array[itemPos] ;     }            public static void main(String[] args) {         NextItem ins = new NextItem() ;         long first = new Date().getTime() ;                 System.out.println("The 1500th Item is "+ins.getItem(1500));         System.out.println("THe Cost of time is :"+(new Date().getTime()-first)+"ms");  } }
   
 
  |