
java经典逻辑编程50题.docx
37页Java经典逻辑编程50题【程序1】 题目:古典问题:有一对兔子,从出生后第3个月起每个月都生一对兔子,小兔子长到第三个月后每个月又生一对兔子,假如兔子都不死,问每个月的兔子总数为多少? 1) 程序分析:兔子的规律为数列1,1,2,3,5,8,13,21.... (斐波那契数列)2) 参考代码import java.util.Scanner;public class RabbitNum { public static void main(String[] args) { Scanner in = new Scanner(System.in); System.out.println("你想知道前几个月的兔子的数量"); int month = in.nextInt(); int[] mon = new int[month]; if(month < 3){ System.out.println("第" + month + "个月有 1 对兔子,共 2 只"); } else{ for(int i = 2; i < month; i++){ mon[0] = mon[1] = 1; mon[i] = mon[i - 1] + mon[i - 2]; System.out.printf("第 %d 个月有 %d 对兔子,共 %d 只兔子\n", i + 1, mon[i], 2 * mon[i]); } }}【程序2】 题目:判断101-200之间有多少个素数,并输出所有素数。
1 ) 程序分析:判断素数的方法:用一个数分别去除2到sqrt(这个数),如果能被整除, 则表明此数不是素数,反之是素数 (java.lang.Math.sqrt(double a) 返回正确舍入的一个double值的正平方根)2) 参考代码public class Prime { public static void main(String[] args) { System.out.print("101--200中的素数有:"); for(int i = 101; i <= 200; i++){ if(isPrime(i)) System.out.print(" " + i); } } //isPrime方法用来判断一个数是否是素数 private static boolean isPrime(int i) { for(int j = 2; j <= Math.sqrt(i); j++){ if(i % j == 0) return false; } return true; }}【程序3】 题目:打印出所有的 "水仙花数 ",所谓 "水仙花数 "是指一个三位数,其各位数字立方和等于该数本身。
例如:153是一个 "水仙花数 ",因为153=1的三次方+5的三次方+3的三次方1 ) 程序分析:利用for循环控制100-999个数,每个数分解出个位,十位,百位 2) 参考代码public class NarcissisticNum { public static void main(String[] args) { System.out.print("水仙花数有:"); for(int num = 100; num < 1000; num++){ if(isNarcissisticNum(num)) System.out.println(" " + num); } } //一个判断正整数是否为水仙花数的方法 private static boolean isNarcissisticNum(int num) { // TODO Auto-generated method stub int a = num / 100; //分离出百位 a int b = (num / 10) % 10; //分离出十位 b int c = num % 10; //分离出个位 c int sum = a * a * a + b * b * b + c * c * c; if(sum == num) return true; else return false; }}【程序4】 题目:将一个正整数分解质因数。
例如:输入90,打印出90=2*3*3*5 程序分析:对n进行分解质因数,应先找到一个最小的质数k,然后按下述步骤完成: (1)如果这个质数恰等于n,则说明分解质因数的过程已经结束,打印出即可 (2)如果n <> k,但n能被k整除,则应打印出k的值,并用n除以k的商,作为新的正整数你n,重复执行第一步 (3)如果n不能被k整除,则用k+1作为k的值,重复执行第一步 参考代码:import java.util.Scanner; public class PrimeFactorOfInteger { public static void main(String[] args) { Scanner input = new Scanner(System.in); System.out.println("请输入一个大于 3 的正整数"); int num = input.nextInt(); System.out.print(num + "的素因数:"); factor(num); } private static void factor(int num) { for(int i = 2; i <= Math.sqrt(num); i++){ if(num % i == 0){ System.out.print(i + " * "); if(isPrime(num / i)){ System.out.println(num / i); } else factor(num / i); break; } } } private static boolean isPrime(int i) { for(int j = 2; j <= Math.sqrt(i); j++){ if(i % j == 0) return false; } return true; }}【程序5】 题目:利用条件运算符的嵌套来完成此题:学习成绩> =90分的同学用A表示,60-89分之间的用B表示,60分以下的用C表示。
1. 程序分析:(a> b)?a:b这是条件运算符的基本例子 参考代码import java.util.Scanner; public class ConditionalOperator { public static void main(String[] args) { Scanner in = new Scanner(System.in); System.out.println("请输入你的分数"); int score = in.nextInt(); if(score >= 90){ System.out.println("A 恭喜"); } else if(score >= 60){ System.out.println("B 不错"); } else{ System.out.println("C 加油"); } }}【程序6】 题目:输入两个正整数m和n,求其最大公约数和最小公倍数。
1.程序分析:利用辗除法 参考代码import java.util.Scanner; public class Example6 { public static void main(String[] args) { Scanner in = new Scanner(System.in); System.out.println("请输入第一个数"); int a = in.nextInt(); System.out.println("请输入第二个数"); int b = in.nextInt(); System.out.println("这两个数的最大公约数是 " + MaxCommonDivisor(a, b)); System.out.println("这两个数的最小公倍数是 " + MinCommonMultiple(a, b)); } private static int MaxCommonDivisor(int a, int b) { if(a < b){ int temp = a; a = b; b = temp; } while(a % b != 0){ int temp = a % b; a = b; b = temp; } return b; } private static int MinCommonMultiple(int a, int b) { return a * b / MaxCommonDivisor(a, b)。
