【程序1】 题目:古典问题:有一对兔子,从出生后第3个月起每个月都生一对兔子,小兔 子长到第三个月后每个月又生一对兔子,假如兔子都不死,问每个月的兔子总数 为多少? 1.程序分析: 兔子的规律为数列1,1,2,3,5,8,13,21.... import java.util.Scanner; public class RabbitsQuit { /** * 【程序1】 题目:古典问题:有一对兔子,从出生后第3个月 起每个月都生一对兔子, 小兔子长到第三个月后每个月又生 一 * 对兔子,假如兔子都不死,问每个月的兔子总数为多少? 1.程序分析: 兔子的规律为 数列1,1,2,3,5,8,13,21.... */ public static void main(String[] args) { // TODO Auto-generated method stub Scanner sc = new Scanner(System.in); RabbitsQuit rq = new RabbitsQuit(); System.out.println("请输入一个整数:"); int n = sc.nextInt(); for (int i = 0; i < n; i++) { System.out.println("第" + (i + 1) + "个月:" + rq.calc(i + 1)); } } private int calc(int x) { if (x == 1 || x == 2) return 1; else return calc(x - 2) + calc(x - 1); } } 【程序2】 题目:判断101-200之间有多少个素数,并输出所有素数。 1.程序分析:判断素数的方法:用一个数分别去除2到sqrt(这个数),如果能被 整除, 则表明此数不是素数,反之是素数。 import java.util.Scanner; public class RabbitsQuit { 1 /** * 【程序1】 题目:古典问题:有一对兔子,从出生后第3个月 起每个月都生一对兔子, 小兔子长到第三个月后每个月又生 一 * 对兔子,假如兔子都不死,问每个月的兔子总数为多少? 1.程序分析: 兔子的规律为 数列1,1,2,3,5,8,13,21.... */ public static void main(String[] args) { // TODO Auto-generated method stub Scanner sc = new Scanner(System.in); RabbitsQuit rq = new RabbitsQuit(); System.out.println("请输入一个整数:"); int n = sc.nextInt(); for (int i = 0; i < n; i++) { System.out.println("第" + (i + 1) + "个月:" + rq.calc(i + 1)); } } private int calc(int x) { if (x == 1 || x == 2) return 1; else return calc(x - 2) + calc(x - 1); } } 法二: import java.util.Vector; public class PrimeNumber2 { /** * 【程序2】 题目:判断101-200之间有多少个素数,并输出所有 素数。 1.程序分析: 判断素数的方法:用一个数分别去除2到sqrt * (这个数),如果能被整除, 则表明此数不是素数,反之是素数。 */ @SuppressWarnings({ "unchecked", "rawtypes" }) public static void main(String[] args) { // TODO Auto-generated method stub Vector v = new Vector();// 使用向量来装素数 int i, j, ct = 0; for (i = 101; i < 200; i++) { for (j = 2; j < i; j++) { if (i % j == 0) { break; } 2 } if (i == j) { v.add(i); ct++; } } System.out.println("101~200之间一共有:" + ct + "个素数。"); System.out.println("==============================="); System.out.println(v.toString().substring(1,v.toString().length() -1)); } } 【程序3】 题目:打印出所有的"水仙花数",所谓"水仙花数"是指一个三位数,其各位数字 立方和等于该数本身。例如:153是一个"水仙花数",因为153=1的三次方+5的 三次方+3的三次方。 1.程序分析:利用for循环控制100-999个数,每个数分解出个位,十位,百位。 public class DaffodilsNumber { /** * 【程序3】 题目:打印出所有的"水仙花数",所谓"水仙花数"是指 一个三位数,其各 位数字立方和等于该数本身。例如: * 153是一个"水仙花数",因为153=1的三次方+5的三次方 +3的三次方。 1.程序分 析: * 利用for循环控制100-999个数,每个数分解出个位, 十位,百位。 */ public static void main(String[] args) { // TODO Auto-generated method stub DaffodilNumber dn; int ct = 0; for (int i = 100; i < 1000; i++) { dn = new DaffodilNumber(i); //System.out.println(dn); if (dn.isDaffodilNumber()) { ct++; System.out.println(i + " = " + dn); } } System.out.println("=============================="); System.out.println("100~999之间一共有:" + ct + "个水仙花数。"); 3 } } class DaffodilNumber { private int bw; private int sw; private int gw; private int num; public DaffodilNumber(int num) { this.num = num; this.bw = num / 100; this.sw = (num-bw*100)/10; this.gw = num % 10; } public boolean isDaffodilNumber() { if (num == bw * bw * bw + sw * sw * sw + gw * gw * gw) return true; else return false; } public String toString() { return bw + "*" + bw + "*" + bw + "+" + sw + "*" + sw + "*" + sw + "+" + gw + "*" + gw + "*" + gw; } } 【程序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 PrimeSplit { 4 /** * 【程序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的值,重复执行第一步。 */ public static void main(String[] args) { // TODO Auto-generated method stub Scanner sc = new Scanner(System.in); int n; while (true) { System.out.println("请输入一个大于1的整数:"); n = sc.nextInt(); if (n > 1) break; } System.out.print(n + " = "); int i = 2; String str = ""; while (i <= n) { if (n % i == 0 && isPrime(i)) { str += "*" + i; n /= i; i = 2; continue; } i++; } System.out.println(str.substring(1)); } private static boolean isPrime(int n) { for (int i = 2; i < n; i++) { if (n % i == 0) { return false; } } return true; } } 5 【程序5】 题目: 利用条件运算符的嵌套来完成此题: 学习成绩>=90分的同学用A表示, 60-89 分之间的用B表示,60分以下的用C表示。 1.程序分析:(a>b)?a:b这是条件运算符的基本例子。 import java.util.Scanner; public class PerformanceRating { /** * 【程序5】 题目:利用条件运算符的嵌套来完成此题:学习成绩>=90分的同学用A表示, 60-89分之间的用B表示,60分以下的用C表示。 * 1.程序分析:(a>b)?a:b这是条件运算符的基本例子。 */ public static void main(String[] args) { // TODO Auto-generated method stub Scanner sc = new Scanner(System.in); float f; while (true) { System.out.println("请输入一个成绩:"); f = sc.nextFloat(); if (f >= 0 && f <= 100) break; } System.out.print("成绩为:" + f + "的,其等级是:"); System.out.println((f >= 90 ? "A" : (f < 60 ? "C" : "B")) + "。 "); } } 【程序6】 题目:输入两个正整数m和n,求其最大公约数和最小公倍数。 1.程序分析:利用辗除法。 import java.util.Scanner; public class DivisorMultiple { /** * 【程序6】 题目:输入两个正整数m和n,求其最大公约数和最小公倍数。 1.程序分析: 利用辗除法。 */ public static void main(String[] args) { 6 // TODO Auto-generated method stub int m, n, c; Scanner sc = new Scanner(System.in); while (true) { System.out.println("请输入第一个正整数:"); m = sc.nextInt(); if (m > 0) break; } while (true) { System.out.println("请输入第二个正整数:"); n = sc.nextInt(); if (n > 0) break; } c = gcd(m, n); System.out.println("[" + m + "," + n + "] = " + c); System.out.println("(" + m + "," + n + ") = " + m * n / c); } private static int gcd(int a, int b) {//使用辗转相除法 int r=a%b; if(r==0){ return b; }else{ return gcd(b,r); } } } 法二: import java.util.Scanner; public class MultipleDivisor { /** * 【程序6】 题目:输入两个正整数m和n,求其最大公约数和最小公倍数。 1.程序分析: 利用辗除法。 */ public static void main(String[] args) { // TODO Auto-generated method stub 7 int m, n, c; Scanner sc = new Scanner(System.in); while (true) { System.out.println("请输入第一个正整数:"); m = sc.nextInt(); if (m > 0) break; } while (true) { System.out.println("请输入第二个正整数:"); n = sc.nextInt(); if (n > 0) break; } c = gcd(m, n); System.out.println("[" + m + "," + n + "] = " + c); System.out.println("(" + m + "," + n + ") = " + m * n / c); } private static int gcd(int a, int b) {//使用辗转相减法完成的 if (a < b) { int tmp; tmp = a; a = b; b = tmp; } if (a % b == 0) return b; else return gcd(b, a - b); } } 【程序 7】 题目: 输入一行字符, 分别统计出其中英文字母、 空格、 数字和其它字符的个数。 1.程序分析:利用 while 语句,条件为输入的字符不为'\n'. import java.io.BufferedReader; import java.io.InputStreamReader; public class JudgeBlankLetterEtc { 8 /** * 【程序 7】 题目:输入一行字符,分别统计出其中英文字母、空格、数字和其它字符的 个数。 * 1.程序分析:利用 while 语句,条件为输入的字符不为'\n'. * * @throws Exception */ public static void main(String[] args) throws Exception { // TODO Auto-generated method stub BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); System.out.println("请输入一串字符串(可包含字母、数字、空格及其它字符): "); StringBuffer sb = new StringBuffer(br.readLine()); int letterCount = 0; int blankCount = 0; int numberCount = 0; int otherCount = 0; for (int i = 0; i < sb.length(); i++) { char c = sb.charAt(i); if (('a' <= c && c <= 'z') || ('A' <= c && c <= 'Z')) { letterCount++; } else if ('0' <= c && c <= '9') { numberCount++; } else if (' ' == c) { blankCount++; } else { otherCount++; } } System.out.println("字符串:" + sb + "中,"); System.out.println("字母:" + letterCount); System.out.println("数字:" + numberCount); System.out.println("空格:" + blankCount); System.out.println("其它字符:" + otherCount); } } 法二: import java.io.BufferedReader; 9 import java.io.InputStreamReader; public class JudgeLetterBlankNumberEtc { /** * @param args * @throws Exception */ @SuppressWarnings("deprecation") public static void main(String[] args) throws Exception { // TODO Auto-generated method stub System.out.println("请输入一串字符:"); InputStreamReader isr = new InputStreamReader(System.in); BufferedReader br = new BufferedReader(isr); String str = br.readLine(); int lc = 0; int nc = 0; int bc = 0; int oc = 0; for (int i = 0; i < str.length(); i++) { char ch = str.charAt(i); if (Character.isLetter(ch)) { lc++; } else if (Character.isDigit(ch)) { nc++; } else if (Character.isSpace(ch)) { bc++; } else { oc++; } } System.out.println("字符串\"" + str + "\"中包含的:"); System.out.println("字母有:" + lc + "个;"); System.out.println("数字有:" + nc + "个;"); System.out.println("空格有:" + bc + "个;"); System.out.println("其它字符有:" + oc + "个;"); } } 【程序8】 题目:求s=a+aa+aaa+aaaa+aa...a的值,其中a是一个数字。例如 10 2+22+222+2222+22222(此时共有5个数相加),几个数相加有键盘控制。 1.程序分析:关键是计算出每一项的值。 import java.util.Scanner; public class CycleNumberAdd { /** * 【程序8】 * 题目:求s=a+aa+aaa+aaaa+aa...a的值,其中a是一个数字。例如 2+22+222+2222+22222(此时共有5个数相加 * ),几个数相加有键盘控制。 1.程序分析:关键是计算出每一项的值。 */ public static void main(String[] args) { // TODO Auto-generated method stub Scanner sc = new Scanner(System.in); int m, n; while (true) { System.out.println("请输入一个1~9之间的一个数字:"); m = sc.nextInt(); if (m > 0 && m < 10) break; } while (true) { System.out.println("请输入循环次数(>1,<19):"); n = sc.nextInt(); if (n > 1 && n < 19) break; } long sum = m; long t = m; String s = "" + m; for (int i = 0; i < n - 1; i++) { t = 10 * t + m; s += " + " + t; sum += t; } System.out.println(s + " = " + sum); } } 【程序9】 11 题目:一个数如果恰好等于它的因子之和,这个数就称为"完全数"。例如6=1+2 +3.编程 找出1000以内的所有完全数。 public class PerfectNumber { /** * 【程序9】 题目:一个数如果恰好等于它的因子之和,这个数就称为"完全数"。例如 6=1+2+3.编程 找出1000以内的所有完全数。 */ public static void main(String[] args) { // TODO Auto-generated method stub System.out.println("1000以内,所有的完全数有:"); for (int i = 2; i < 1001; i++) { String str = "1"; int sum = 1; for (int j = 2; j <= i / 2; j++) { if (i % j == 0) { sum += j; str += " + " + j; } } if (i == sum) { System.out.println(sum + " = " + str); } } } } 【程序10】 题目:一球从100米高度自由落下,每次落地后反跳回原高度的一半;再落下, 求它在 第10次落地时,共经过多少米?第10次反弹多高? public class BallBounce { /** * 【程序10】 题目:一球从100米高度自由落下,每次落地后反跳回原高度的一半;再 落下,求它在 第10次落地时,共经过多少米?第10次反弹多高? */ public static void main(String[] args) { // TODO Auto-generated method stub double high = 100.0; double sum = 0.0; for (int i = 0; i < 10; i++) { sum += high; 12 high /= 2; } System.out.println("小球10后的经过的距离为:" + sum + "米。"); System.out.println("小球第10次落地后,再弹起的高度为:" + high + "米。 "); } } 【程序11】 题目:有1、2、3、4个数字,能组成多少个互不相同且无重复数字的三位数?都 是多少? 1.程序分析:可填在百位、十位、个位的数字都是1、2、3、4。组成所有的排列 后再去 掉不满足条件的排列。 public class ArrangementNumber { /** * 【程序11】 题目:有1、2、3、4个数字,能组成多少个互不相同且无重复数字的三位 数?都是多少? * 1.程序分析:可填在百位、十位、个位的数字都是1、2、3、4。