/* * 一个有序数列,序列中的每一个值都能够被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"); } }

|