当前位置:文档之家› java50道经典逻辑题

java50道经典逻辑题

題目:古典问题:有一对兔子,从出生后第3个月起每个月都生一对兔子,小兔子长到第三个月后每个月又生一对兔子,假如兔子都不死,问每个月的兔子总数为多少?【程序1】題目:古典问题:有一对兔子,从出生后第3个月起每个月都生一对兔子,小兔子长到第三个月后每个月又生一对兔子,假如兔子都不死,问每个月的兔子总数为多少?分析:咋一看不知道如何下手,但是你在草稿纸上写写分析一下,就很快发现其中的规律了package logic; 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之间有多少个素数,并输出所有素数。

分析:如果知道素数是什么,该题就应该不难了package logic; 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) { // TODO Auto-generated method stub for(int j = 2; j <= Math.sqrt(i); j++){ if(i % j == 0) return false; } return true; } }【程序3】题目:打印出所有的"水仙花数",所谓"水仙花数"是指一个三位数,其各位数字立方和等于该数本身。

例如:153是一个"水仙花数",因为153=1的三次方+5的三次方+3的三次方。

分析:解决这个题目主要要知道怎么把一个数的各个位上的数拆分出来package logic; import java.util.Scanner; public class NarcissisticNum { public static void main(String[] args) { Scanner in = new Scanner(System.in); 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。

(1)如果这个质数恰等于n,则说明分解质因数的过程已经结束,打印出即可。

(2)如果n>k,但n能被k整除,则应打印出k的值,并用n除以k的商,作为新的正整数你n,重复执行第一步。

(3)如果n不能被k整除,则用k+1作为k的值,重复执行第一步。

分析:按步骤实现就可以了(有多种实现方式,以下代码供参考。

我也参考了别人的)package logic; 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) { // TODO Auto-generated method stub 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) { // TODO Auto-generated method stub 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表示。

分析:这题应该是最简单的吧package logic; 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,求其最大公约数和最小公倍数。

分析:需要了解求最大公约数和最小公倍数的方法package logic; 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) { // TODO Auto-generated method stub 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) { // TODO Auto-generated method stub return a * b / MaxCommonDivisor(a, b); } }【程序7】题目:输入一行字符,分别统计出其中英文字母、空格、数字和其它字符的个数。

分析:这题也比较简单,知道怎么表示字母、空格、数字就OKpackage logic; import java.util.Scanner; public class Statistic { public static void main(String[] args) { Scanner in = new Scanner(System.in); System.out.println("Input one sentance."); String s = in.nextLine(); int letter = 0, symbol = 0, space = 0, number = 0; char[] strArray = s.toCharArray(); for (int i = 0; i < strArray.length; i++) { char c = strArray[i]; if((&#39;a&#39; <= c && c <= &#39;z&#39;) || (&#39;A&#39; <= c && c <= &#39;Z&#39;)) letter++; else if(48 <= c && c <= 57) //注意!数字0-9的ASCII码是48-57 number++; else if(c == &#39; &#39;) space++; else symbol++; } System.out.println("This sentance have " + letter + " letters, "); System.out.println("have "+ number + " numbers, "); System.out.println("have " + space + " spaces, " + "and " + symbol + " symbols."); } }【程序8】题目:求s=a+aa+aaa+aaaa+aa...a的值,其中a是一个数字。

相关主题