Java50题——学习以及思考
1 /* 2 【程序1】 3 题目:古典问题:有一对兔子,从出生后第3个月起每个月都生一对兔子, 4 小兔子长到第三个月后每个月又生一对兔子,假如兔子都不死, 5 问每个月的兔子对数为多少? 6 分析: 7 1 1 2 3 5 8 13 8 x3=x2+x1 9 反思:代码逻辑清晰,每次结果等于前两之和。 10 尝试更复杂的递归调用解决问题。 11 */ 12 class demo2{ 13 public static void main(String[] args){ 14 int day=1; 15 int x3,x2=1,x1=1; 16 System.out.println("1"); 17 System.out.println("1"); 18 for(day=3;day<20;day++){ 19 x3=x2+x1; 20 x1=x2; 21 x2=x3; 22 System.out.println(x3); 23 } 24 } 25 } 26 /* 27 递归分析: 28 递归条件;等于前两之和 29 递归出口:第二次 或 第一次 结果肯定为一。 30 31 反思:递归只能输出某个月的兔子,不知道怎么输出一到十月的兔子, 32 因为 10=9+8 9=8+7;有两个8月。在计算中不是只有一个八月,也不是线性依次输出。 33 return 的结果: 34 10 35 9 8 36 8 7 7 6 37 */ 38 class demo1{ 39 public static void main(String[] args){ 40 // 41 System.out.println(func(10)); 42 //func(10); 43 } 44 static int func(int x){ 45 if(x==1||x==2){ 46 //System.out.println("1"); 47 return 1; 48 49 }else{ 50 //System.out.println(x); 51 //int z = func(x-1)+func(x-2); 52 //System.out.println(z); 53 return func(x-1)+func(x-2); 54 55 } 56 } 57 }
1 /* 2 题目:判断101-200之间有多少个素数,并输出所有素数。 3 程序分析:判断素数的方法:用一个数分别去除2到sqrt(这个数), 4 如果能被整除,则表明此数不是素数,反之是素数。 5 分析: 6 循环101到200;每个数除二看结果; 7 */ 8 class demo2{ 9 public static void main(String[] args){ 10 int x =101; 11 for(x=101;x<201;x++){ 12 if(isPrime(x)){ 13 System.out.println(x); 14 } 15 } 16 } 17 static boolean isPrime(int x){ 18 //boolean flage; 19 if(x==1){ 20 return false; 21 } 22 for(int y=2;y<=Math.sqrt(x);y++){ 23 if(x%y == 0){ 24 return false; 25 } 26 } 27 return true; 28 } 29 }
1 /* 2 【程序3】 3 题目:打印出所有的"水仙花数",所谓"水仙花数"是指一个三位数,其各位数字立方和等于该数本身。 4 例如:153是一个"水仙花数",因为153=1的三次方+5的三次方+3的三次方。 5 程序分析:利用for循环控制100-999个数,每个数分解出个位,十位,百位。 6 提取一个数的每一位的数 7 反思:主要是对/和%的了解 8 */ 9 class demo3{ 10 public static void main(String[] args){ 11 for(int i=100;i<1000;i++){ 12 if(islotus(i)){ 13 System.out.println(i); 14 } 15 } 16 } 17 static boolean islotus(int x){ 18 int bai,shi,ge; 19 bai=x/100; 20 shi=x%100/10; 21 ge=x%10; 22 if(x==bai*bai*bai+shi*shi*shi+ge*ge*ge){ 23 return true; 24 }else{ 25 return false; 26 } 27 } 28 }
1 /* 2 【程序4】 3 题目:将一个正整数分解质因数。例如:输入90,打印出90=2*3*3*5。 4 程序分析:对n进行分解质因数,应先找到一个最小的质数k,然后按下述步骤完成: 5 (1)如果这个质数恰等于n,则说明分解质因数的过程已经结束,打印出即可。 6 (2)如果n<>k,但n能被k整除,则应打印出k的值,并用n除以k的商,作为新的正整数n,重复执行第一步。 7 (3)如果n不能被k整除,则用k+1作为k的值,重复执行第一步。 8 反思:while是关键,不需要专门挑选出质数。 9 */ 10 public class demo4{ 11 public static void main(String[] args){ 12 int n = 90; 13 decompose(n); 14 } 15 private static void decompose(int n){ 16 System.out.print(n+"="); 17 for(int i=2;i<n+1;i++){ 18 while(n%i==0 && n!=i){ 19 n/=i; 20 System.out.print(i+"*"); 21 } 22 if(n==i){ 23 System.out.println(i); 24 break; 25 } 26 } 27 } 28 }
/* 【程序5】 题目:利用条件运算符的嵌套来完成此题: 学习成绩>=90分的同学用A表示, 60-89分之间的用B表示, 60分以下的用C表示。 程序分析:(a>b)?a:b这是条件运算符的基本例子。 分析:()?true:false 三目运算符的嵌套使用。 */ class demo5{ public static void main(String[] args){ int x= 65; grade(x); } static void grade(int x){ String str= (x>=90)?"A":(x>=60)?"B":"c"; System.out.println(x+"等级"+str); } }