题目:古典问题:有一对兔子,从出生后第3个月起每个月都生一对兔子,小兔子长到第四个月后每个月又生一对兔子,假如兔子都不死,问每个月的兔子总数为多少?
1.程序分析: 兔子的规律为数列1,1,2,3,5,8,13,21….
分析: 首先这个你得找规律,这个刚开始的时候不要太心急。
不难看出有个很好的式子 从第三个起当前数等于前两个数之和
public static void main(String args[]){ int i=0; for(i=1;i<=20;i++) System.out.println(f(i)); } public static int f(int x) { if(x==1 || x==2) return 1; else return f(x-1)+f(x-2); }
题目:判断101-200之间有多少个素数,并输出所有素数。
分析:
- 这个题目按照一般的想法可以很快就求出来,但是要进一步优化
- 就是每次除的时候只要取出他的平方数加1就ok了,没必要取到取到该数的本身
package com.mendal.test1; import org.junit.Test; public class Test5 { @Test public void test() { int i=101; int sum=0; long time=System.currentTimeMillis(); for(i=101;i<200;i++){ for(int j=2;j<Math.sqrt(i)+1;j++){ if(i%j==0){ break; }else{ if(j>Math.sqrt(i)){ sum+=1; System.out.println(i); } } } } System.out.println(System.currentTimeMillis()-time); System.out.println(sum); } }
题目: 打印出所有的 “水仙花数 “,所谓 “水仙花数 “是指一个三位数,其各位数字立方和等于该数本身。例如:153是一个 “水仙花数 “,因为153=1的三次方+5的三次方+3的三次方。
public static void main(String[] args) { int data1,data2,data3; for(int i=100;i<1000;i++){ data1=i%10%10; data2=i/10%10; data3=i/100; int data=(int) (Math.pow(data1, 3)+Math.pow(data2, 3)+Math.pow(data3, 3)); if(data==i){ System.out.println(i); } } }