1:java
/** * 題目:古典問題:有一對兔子,從出生後第3個月起每月都生一對兔子, 小兔子長到第三個月後每月又生一對兔子, 假如兔子都不死,問每月的兔子對數爲多少? * 程序分析: 兔子的規律爲數列1,1,2,3,5,8,13,21.... * * @author super * */ public class Test { public static void main(String[] args) { for (int i = 1; i <= 20; i++) { System.out.println("第" + i + "個月的兔子總數爲:" + Rabbit(i)); } } // 遞歸處理 public static int Rabbit(int n) { // 前兩個月兔子總數各爲1 if (n == 1 || n == 2) { return 1; } else { // 第三個月開始,每月兔子總數爲上個月和上上個月的和 return Rabbit(n - 1) + Rabbit(n - 2); } } }
輸出:git
第1個月的兔子總數爲:1express
第2個月的兔子總數爲:1編程
第3個月的兔子總數爲:2數組
第4個月的兔子總數爲:3app
第5個月的兔子總數爲:5ide
第6個月的兔子總數爲:8學習
第7個月的兔子總數爲:13測試
第8個月的兔子總數爲:21ui
第9個月的兔子總數爲:34
第10個月的兔子總數爲:55
第11個月的兔子總數爲:89
第12個月的兔子總數爲:144
第13個月的兔子總數爲:233
第14個月的兔子總數爲:377
第15個月的兔子總數爲:610
第16個月的兔子總數爲:987
第17個月的兔子總數爲:1597
第18個月的兔子總數爲:2584
第19個月的兔子總數爲:4181
第20個月的兔子總數爲:6765
2:
題目:判斷101-200之間有多少個素數,並輸出全部素數。
public class Test { public static void main(String[] args) { GetSuShu(101, 200); } /*** * 獲取a,b之間的全部素數並統計輸出 * * @param a * 起始數字 * @param b * 結束數字 */ public static void GetSuShu(int a, int b) { // 統計素數個數 int count = 0; // 外循環遍歷既定數字範圍 for (int i = a; i <= b; i++) { // 新建一個判斷變量 boolean flag = true; // 從2開始到自身依次相除判斷是否素數 for (int j = 2; j < i; j++) { // 若是不是素數則改成false並跳出內循環 if (i % j == 0) { flag = false; break; } } // 若是遍歷結束肯定是素數則統計並輸出 if (flag) { count++; System.out.println("第" + count + "個素數:" + i); } } } }
輸出:
第1個素數:101
第2個素數:103
第3個素數:107
第4個素數:109
第5個素數:113
第6個素數:127
第7個素數:131
第8個素數:137
第9個素數:139
第10個素數:149
第11個素數:151
第12個素數:157
第13個素數:163
第14個素數:167
第15個素數:173
第16個素數:179
第17個素數:181
第18個素數:191
第19個素數:193
第20個素數:197
第21個素數:199
3:
題目:打印出全部的"水仙花數",所謂"水仙花數"是指一個三位數,其各位數字立方和等於該數自己。例如:153是一個"水仙花數",由於153=1的三次方+5的三次方+3的三次方。
public class Test { public static void main(String[] args) { // 打印水仙花數 // 某個n位數字每一位的n次方相加等於n // 1^3+5^3+3^=1+125+27=153 int ShuiSum = 0; for (int i = 0; i < 1000; i++) { if (i == Math.pow(i % 10, 3) + Math.pow(i / 100, 3) + Math.pow(i / 10 - (i / 100) * 10, 3)) { // 個位數字 百位數字 十位數字 System.out.println(i); ShuiSum++; } } System.out.println("共有水仙花數" + ShuiSum + "個"); } }
輸出:
0
1
153
370
371
407
共有水仙花數6個
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的值,重複執行第一步。
Test1:
public class Test { public static void main(String[] args) { // 給定一個測試的數字 int n = 120; // 先輸出一個 「120=」 System.out.print(n + "="); // 從2開始遍歷該數字的質數 for (int i = 2; i <= n; i++) { // 若是能整除,是質數則繼續 if (n % i == 0) { // 是否相同 if (n == i) { // 若是相同則僅輸出數字並跳出循環 System.out.print(i); break; } // 若是不相同說明還可能有後續質數,更新n的值 n /= i; // 輸出 當前質數i 並加上* 號 System.out.print(i + "*"); // 因爲獲取最小質數後可能還有相同的一個最小質數,因此須要回滾i變量 // 因爲每次獲取到的確定是當前最小的質數,因此只須要回滾1就能夠了 i--; } } } }
輸出:
120=2*2*2*3*5
Test2:
public classProg4{ public static void main(String[] args){ int n = 13; decompose(n); } private static void decompose(int n){ System.out.print(n+"="); for(int i=2;i<n+1;i++){ while(n%i==0 && n!=i){ n/=i; System.out.print(i+"*"); } if(n==i){ System.out.println(i); break; } } } }
5
題目:利用條件運算符的嵌套來完成此題:學習成績>=90分的同窗用A表示,60-89分之間的用B表示,60分如下的用C表示。
程序分析:(a>b)?a:b這是條件運算符的基本例子。
Test:
public class Test { public static void main(String[] args) { int score = 46; String grade = score >= 90 ? "A" : score >= 60 ? "B" : "C"; System.out.println(grade); } }
輸出:
C
Test2:
public class Prog5{ publicstatic void main(String[] args){ intn = -1; try{ n= Integer.parseInt(args[0]); }catch(ArrayIndexOutOfBoundsExceptione){ System.out.println("請輸入成績"); return; } grade(n); } //成績等級計算 privatestatic void grade(int n){ if(n>100|| n<0) System.out.println("輸入無效"); else{ String str = (n>=90)?"分,屬於A等":((n>60)?"分,屬於B等":"分,屬於C等"); System.out.println(n+str); } } }
6:
題目:輸入兩個正整數m和n,求其最大公約數和最小公倍數。
Test:
public class Test { public static void main(String[] args) { int a = 120; int b = 90; System.out.println(a + "和" + b + "的最大公約數爲:" + GetGongYue(a, b)); System.out.println(a + "和" + b + "的最小公倍數爲:" + GetGongBei(a, b)); } /*** * 獲取兩個正整數的最大公約數 * * @param a * 參數 * @param b * 參數 * @return 兩個數的最大公約數 */ public static int GetGongYue(int a, int b) { // 初始化最大公約數爲較小數字 int gongYue = (a < b ? a : b); // 從較小數字開始向下遍歷,知足添加即賦值並跳出循環 for (int i = gongYue;; i--) { if (a % i == 0 && b % i == 0) { gongYue = i; break; } } return gongYue; } /*** * 獲取兩個正整數的最小公倍數 * * @param a * 參數 * @param b * 參數 * @return 兩個數字的最小公倍數 */ public static int GetGongBei(int a, int b) { // 初始化最小公倍數爲較大數字 int gongBei = (a > b ? a : b); // 向上遍歷知足條件即賦值並跳出循環 for (int i = gongBei;; i++) { if (i % a == 0 && i % b == 0) { gongBei = i; break; } } return gongBei; } }
輸出:
120和90的最大公約數爲:30
120和90的最小公倍數爲:360
Test2:
public classProg6{ public static void main(String[] args){ int m,n; try{ m = Integer.parseInt(args[0]); n = Integer.parseInt(args[1]); }catch(ArrayIndexOutOfBoundsExceptione){ System.out.println("輸入有誤"); return; } max_min(m,n); } //求最大公約數和最小公倍數 private static void max_min(int m, int n){ int temp = 1; int yshu = 1; int bshu = m*n; if(n<m){ temp = n; n = m; m = temp; } while(m!=0){ temp = n%m; n = m; m = temp; } yshu = n; bshu /= n; System.out.println(m+"和"+n+"的最大公約數爲"+yshu); System.out.println(m+"和"+n+"的最小公倍數爲"+bshu); } }
7:
題目:輸入一行字符,分別統計出其中英文字母、空格、數字和其它字符的個數。
public class Test { public static void main(String[] args) { Check("sfs4564 4564fdg 4564gfd456 $%dgdf^%&%&"); System.out.println("--------------------------"); Check("sfs4564 4564fdg 4564gfd456 $%dgdf^%&%&"); } // 題目:輸入一行字符,分別統計出其中英文字母、空格、數字和其它字符的個數。 private static void Check(String s) { int enNum = 0; int nuNum = 0; int kongNum = 0; int othNum = 0; // 轉換成字符數組遍歷 char[] chs = s.toCharArray(); for (int i = 0; i < chs.length; i++) { // 若是是數字 if (Character.isDigit(chs[i])) { nuNum++; // 是否字母 } else if (Character.isLetter(chs[i])) { enNum++; // 是否空格 } else if (chs[i] == ' ') { kongNum++; } else { // 其餘字符 othNum++; } } System.out.println("數字字符數量爲:" + nuNum); System.out.println("字母字符數量爲:" + enNum); System.out.println("空格字符數量爲:" + kongNum); System.out.println("其餘字符數量爲:" + othNum); } //調用字符串charAt()方法遍歷 private static void Check2(String s) { int enNum = 0; int nuNum = 0; int kongNum = 0; int othNum = 0; for (int i = 0; i < s.length(); i++) { if (Character.isDigit(s.charAt(i))) { nuNum++; } else if (Character.isLetter(s.charAt(i))) { enNum++; } else if (s.charAt(i) == ' ') { kongNum++; } else { othNum++; } } System.out.println("數字字符數量爲:" + nuNum); System.out.println("字母字符數量爲:" + enNum); System.out.println("空格字符數量爲:" + kongNum); System.out.println("其餘字符數量爲:" + othNum); } }
輸出:
數字字符數量爲:15
字母字符數量爲:13
空格字符數量爲:3
其餘字符數量爲:7
--------------------------
數字字符數量爲:15
字母字符數量爲:13
空格字符數量爲:3
其餘字符數量爲:7
Test2:
importjava.util.Scanner; public classProg7_1{ public static void main(String[] args){ System.out.print("請輸入一串字符:"); Scanner scan = new Scanner(System.in); String str = scan.nextLine();//將一行字符轉化爲字符串 scan.close(); count(str); } //統計輸入的字符數 private static void count(String str){ String E1 ="[\u4e00-\u9fa5]";//漢字 String E2 = "[a-zA-Z]"; String E3 = "[0-9]"; String E4 = "\\s";//空格 int countChinese = 0; int countLetter = 0; int countNumber = 0; int countSpace = 0; int countOther = 0; char[] array_Char = str.toCharArray();//將字符串轉化爲字符數組 String[] array_String = newString[array_Char.length];//漢字只能做爲字符串處理 for(int i=0;i<array_Char.length;i++) array_String[i] = String.valueOf(array_Char[i]); //遍歷字符串數組中的元素 for(String s:array_String){ if(s.matches(E1)) countChinese++; else if(s.matches(E2)) countLetter++; else if(s.matches(E3)) countNumber++; else if(s.matches(E4)) countSpace++; else countOther++; } System.out.println("輸入的漢字個數:"+countChinese); System.out.println("輸入的字母個數:"+countLetter); System.out.println("輸入的數字個數:"+countNumber); System.out.println("輸入的空格個數:"+countSpace); System.out.println("輸入的其它字符個數:"+countSpace); } }
importjava.util.*; public classProg7_2{ public static void main(String[] args){ System.out.println("請輸入一行字符:"); Scanner scan = new Scanner(System.in); String str = scan.nextLine(); scan.close(); count(str); } //統計輸入的字符 private static void count(String str){ List<String> list = newArrayList<String>(); char[] array_Char = str.toCharArray(); for(char c:array_Char) list.add(String.valueOf(c));//將字符做爲字符串添加到list表中 Collections.sort(list);//排序 for(String s:list){ int begin = list.indexOf(s); int end = list.lastIndexOf(s); //索引結束統計字符數 if(list.get(end)==s) System.out.println("字符‘"+s+"’有"+(end-begin+1)+"個"); } } }
8:
題目:求s=a+aa+aaa+aaaa+aa...a的值,其中a是一個數字。例如2+22+222+2222+22222(此時共有5個數相加),幾個數相加有鍵盤控制。
程序分析:關鍵是計算出每一項的值。
public class Test { public static void main(String[] args) { for (int i = 1; i < 10; i++) { System.out.println(Sum(2, i)); } } /*** * 特殊求和方法 求s=a+aa+aaa+aaaa+aa...a的值 * * @param a * 要作相加操做的數字 * @param count * 相加的次數 * @return 總和 */ private static int Sum(int a, int count) { // 求和變量 int sum = 0; // 臨時變量 int temp = a; // 經歷count次求和 for (int i = 0; i < count; i++) { // 第一次的和即a的值 sum += temp; // 以後的值每次更新爲a上一次的值乘10再加上a temp = temp * 10 + a; } return sum; } }
Test2:
importjava.util.Scanner; public classProg8{ public static void main(String[] args){ System.out.print("求s=a+aa+aaa+aaaa+...的值,請輸入a的值:"); Scanner scan = newScanner(System.in).useDelimiter("\\s*");//以空格做爲分隔符 int a = scan.nextInt(); int n = scan.nextInt(); scan.close();//關閉掃描器 System.out.println(expressed(2,5)+add(2,5)); } //求和表達式 private static String expressed(int a,intn){ StringBuffer sb = new StringBuffer(); StringBuffer subSB = new StringBuffer(); for(int i=1;i<n+1;i++){ subSB = subSB.append(a); sb = sb.append(subSB); if(i<n) sb = sb.append("+"); } sb.append("="); return sb.toString(); } //求和 private static long add(int a,int n){ long sum = 0; long subSUM = 0; for(int i=1;i<n+1;i++){ subSUM = subSUM*10+a; sum = sum+subSUM; } return sum; } }
9:
題目:一個數若是剛好等於它的因子之和,這個數就稱爲"完數"。例如6=1+2+3.編程找出1000之內的全部完數。
Test:
public class CeShi { /** * 題目:一個數若是剛好等於它的因子之和,這個數就稱爲"完數"。例如6=1+2+3.編程找出1000之內的全部完數。 * * @param args */ public static void main(String[] args) { WanShu(1000); } /*** * * @param n */ private static void WanShu(int n) { int count = 0; // 從1到給定的數字n遍歷 for (int i = 1; i <= n; i++) { // 待用變量 int temp = 0; // 內循環從1到n/2獲取各個最小質數 for (int j = 1; j <= n / 2; j++) { // 判斷是否當前數字的質數 if (i % j == 0) { // 若是是質數就累加 temp += j; // 若是質數累加的結果和當前數字相同,則斷定爲完數並輸出 if (temp == i) { System.out.println(i); count++; } } } } System.out.println(n + "之內共有" + count + "個完數"); } }
輸出:
1
6
24
28
496
1000之內共有5個完數
10:
題目:一球從100米高度自由落下,每次落地後反跳回原高度的一半;再落下,求它在第10次落地時,共通過多少米?第10次反彈多高?
Test:
public class CeShi { /** * 題目:一球從100米高度自由落下,每次落地後反跳回原高度的一半; 再落下,求它在 第10次落地時,共通過多少米?第10次反彈多高? * * @param args */ public static void main(String[] args) { for (int i = 1; i <= 10; i++) { GetHeight(i); System.out.println("------------------------------"); } } private static void GetHeight(int count) { // 統計第count次彈起時通過的距離 double sum = 0.0; // 統計第count次下落時通過的距離 double sum2 = 0.0; // 原始高度 double height = 100.0; for (int i = 1; i <= count; i++) { // 每次彈起時通過的距離爲下落時高度的1.5倍 sum += height + height / 2; // 當達到第count次時,彈起時的總距離減去最後一次彈起的高度即爲第count次下落時通過的距離 if (i == count) { sum2 = sum - height / 2; System.out.println("第" + count + "次時彈起的高度爲:" + height / 2); } // 每彈起一次,起始下落高度減半 height /= 2; } System.out.println("第" + count + "次落下時通過的距離是:" + sum2 + "米。"); System.out.println("第" + count + "次彈起時通過的距離是:" + sum + "米。"); } }
輸出:
第1次時彈起的高度爲:50.0
第1次落下時通過的距離是:100.0米。
第1次彈起時通過的距離是:150.0米。
------------------------------
第2次時彈起的高度爲:25.0
第2次落下時通過的距離是:200.0米。
第2次彈起時通過的距離是:225.0米。
------------------------------
第3次時彈起的高度爲:12.5
第3次落下時通過的距離是:250.0米。
第3次彈起時通過的距離是:262.5米。
------------------------------
第4次時彈起的高度爲:6.25
第4次落下時通過的距離是:275.0米。
第4次彈起時通過的距離是:281.25米。
------------------------------
第5次時彈起的高度爲:3.125
第5次落下時通過的距離是:287.5米。
第5次彈起時通過的距離是:290.625米。
------------------------------
第6次時彈起的高度爲:1.5625
第6次落下時通過的距離是:293.75米。
第6次彈起時通過的距離是:295.3125米。
------------------------------
第7次時彈起的高度爲:0.78125
第7次落下時通過的距離是:296.875米。
第7次彈起時通過的距離是:297.65625米。
------------------------------
第8次時彈起的高度爲:0.390625
第8次落下時通過的距離是:298.4375米。
第8次彈起時通過的距離是:298.828125米。
------------------------------
第9次時彈起的高度爲:0.1953125
第9次落下時通過的距離是:299.21875米。
第9次彈起時通過的距離是:299.4140625米。
------------------------------
第10次時彈起的高度爲:0.09765625
第10次落下時通過的距離是:299.609375米。
第10次彈起時通過的距離是:299.70703125米。
------------------------------
Test2:
importjava.util.Scanner; public classProg10{ public static void main(String[] args){ System.out.print("請輸入小球落地時的高度和求解的次數:"); Scanner scan = newScanner(System.in).useDelimiter("\\s"); int h = scan.nextInt(); int n = scan.nextInt(); scan.close(); distance(h,n); } //小球從h高度落下,經n次反彈後通過的距離和反彈的高度 private static void distance(int h,int n){ double length = 0; for(int i=0;i<n;i++){ length += h; h /=2.0 ; } System.out.println("通過第"+n+"次反彈後,小球共通過"+length+"米,"+"第"+n+"次反彈高度爲"+h+"米"); } }