經常使用算法彙總

1.判2的乘方 

題目:實現一個方法,判斷一正整數是不是2的乘方(好比16是2的4次方,返回true;18不是2的乘方,返回false)要求性能儘量高。java

解法一:建立一箇中間變量Temp,初始值是1,而後進入一個循環,循環中每次讓Temp和目標整數比較,若是相等,則說明目標整數是2的乘方,若是不相等,則讓Temp增長一 倍,繼續循環比較。讓Temp大於目標整數時,說明目標整數不是2的乘方。node

1 public static boolean isPowerOf2(int number) {
2         int temp = 1;
3         while (temp <= number) {
4             if (temp == number)
5         return true;
6     }
7         return false;
8 }
View Code

 解法二:把解法一的乘以2操做改爲向左移位,移位的性能比乘法高的多,代碼以下:git

 1 public static boolean isPowerOf2(int number) {
 2         int temp = 1;
 3         while (temp <= number) {
 4             if (temp == number){
 5             return true;
 6          }
 7           temp = temp<<1;   
 8       }
 9         return false;
10 }
View Code

前兩種算法的時間複雜度是O(logN).算法

 解法三編程

1) 把前兩種解法的2的乘方的結果轉換成2進制數,十進制的2轉化成二進制是10B,4轉換成二進制是100B,8轉換成二進制是1000B...以下圖數組

2)即只要是2的乘方的數轉換成二進制結果中只有一個1,再把這些2的乘方都減去1,轉換成二進制數爲:緩存

 3)用2的乘方的自己和它減去1的結果進行按位與運算,也就是N&N-1,結果以下:微信

即只有是2的乘方,按以上步驟結果都爲0,代碼以下app

public static boolean ispowerOf2(Integer number){
    return (number & number - 1) == 0;
}

該算法的時間複雜度爲O(1)。ide

2.篩法求素數

解法:

 1 using System;
 2 public class PrimeFilter{
 3     public static void Main( string [] args ){
 4         int N = 100;
 5         bool [] a = new bool[N+1];
 6         for( int i=2; i<=N; i++ ) a[i]=true;
 7   
 8         for( int i=2; i<N; i++ )
 9         {
10             if(a[i]) for( int j=i*2; j<=N; j+=i )
11                 a[j]=false;
12         }
13   
14         for( int i=2; i<=N; i++) 
15             if( a[i] ) Console.Write( i + " " );
16     }
17 }
View Code

3.找素數

請編寫程序,從鍵盤輸入兩個整數m,n,找出等於或大於m的前n個素數。

輸入格式:

第一個整數爲m,第二個整數爲n;中間使用空格隔開。例如:

103 3

輸出格式:

從小到大輸出找到的等於或大於m的n個素數,每一個一行。例如:

103

107

109

輸入樣例:

9223372036854775839 2

輸出樣例:

9223372036854775907 9223372036854775931

解法:

 1 import java.math.BigInteger;
 2 import java.util.Scanner;
 3 public class Main {
 4     public static void main(String[] args){
 5         Scanner in = new Scanner(System.in);
 6         BigInteger m;
 7         int n;
 8 
 9         m=in.nextBigInteger();
10         n=in.nextInt();
11         int cnt=0;
12         while (cnt<n){
13             if (m.isProbablePrime(100)){
14                 System.out.println(m);
15                 cnt++;
16             }
17             m=m.nextProbablePrime();
18         }
19         in.close();
20     }
21 }
View Code

4.計算正五邊形的面積和周長 

從下列的抽象類shape類擴展出一個正五邊形(regular pentagon)類RPentagon,這個類將正五邊形的邊長做爲私有成員,類中包含初始化這個值的構造方法。

public abstract class shape {// 抽象類

/ 抽象方法 求面積 / public abstract double getArea();

/ 抽象方法 求周長 / public abstract double getPerimeter(); }

請編程從鍵盤輸入正五邊形的邊長值,建立一個正五邊形對象,而後輸出正五邊形的面積和正五邊形的周長。計算正五邊形的面積公式爲: S=5a^2/(4tan(36度))其中a爲邊長。 或者:S=(1/4)a^2√(25+10√5) 輸出結果保留4位小數。

輸入格式:

輸入正五邊形的邊長。例如:

5

輸出格式:

輸出正五邊形的面積和周長。第一行輸出面積,第二行輸出周長。例如: 43.0119

25

輸入樣例:

16.8

輸出樣例:

485.5875 84

解法:

 1 import java.util.Scanner;
 2 abstract class Shape{
 3     abstract double getArea();
 4     abstract double getPerimeter();
 5 }
 6 class RPentagon extends Shape{
 7    private double a;
 8    public RPentagon(double a){
 9        this.a = a;
10    }
11    public double getArea(){
12         return 0.25*a*a*Math.sqrt(25+10*Math.sqrt(5));
13     }
14     public double getPerimeter() {
15         return 5*a;
16     }
17     
18 }
19 public class Main {
20 
21     public static void main(String[] args) {
22         Scanner in = new Scanner(System.in);
23         double b=in.nextDouble();
24         RPentagon r= new RPentagon(b);
25         System.out.println(String.format("%.4f",r.getArea()));
26         System.out.println((int)r.getPerimeter());
27     }
28 
29 }
View Code

5.簡單的計算器  

編程實現一個簡單的計算器,實現兩個整數的加、減、乘、除。 注意:輸入的數字爲整數,可能大於Long.MAX_VALUE (即: 9223372036854775807)

輸入格式:

例如輸入被除數和除數,除號是「/」:

199818221687230837883277970155607217447/15607605175531087007(除法運算)

輸出格式:

12802618943776012921 (輸出商)

輸入樣例:

268757455632088758902114193354244344883-187825044215992922193584201757800947591

輸出樣例:

80932411416095836708529991596443397292

提示:

一. 當字符串對象str存儲的值爲"199818221687230837883277970155607217447/15607605175531087007"時,下面的方法能夠將str從除號"/"處分割成兩個字符串:

String[] ob = str.split("\D", 0);

這時,ob[0]的值爲"199818221687230837883277970155607217447";

ob[1]的值爲"15607605175531087007".

二. 若是要檢測字符串中是否包含除號'/',能夠用下面的方法檢測:

(in1.indexOf('/') != -1)爲true,表示包含'/'。

解法:

 1 import java.math.BigDecimal;
 2 
 3 import java.util.Scanner;
 4 public class Main {
 5     public static void main(String [] args){
 6         Scanner scanner = new Scanner(System.in);
 7         String s = scanner.nextLine();
 8         char [] key = {'+', '-', '*', '/'};
 9         int len = -1;
10         int flag = 0;
11         for (int i = 0; i < key.length; i++) {
12             len = s.indexOf(key[i]);
13             if (len != -1){
14                 flag = i;
15                 break;
16             }
17         }
18         BigDecimal m = new BigDecimal(s.substring(0, len));
19         BigDecimal n = new BigDecimal(s.substring(len + 1));
20         switch (flag){
21             case 0:{
22                 System.out.println(m.add(n));
23                 break;
24             }
25             case 1:{
26                 System.out.println(m.subtract(n));
27                 break;
28             }
29             case 2:{
30                 System.out.println(m.multiply(n));
31                 break;
32             }
33             case 3:{
34                 System.out.println(m.divide(n));
35                 break;
36             }
37         }
38     }
39 
40 }
View Code

6.求解給定字符串的前綴 

求解給定字符串的前綴。

輸入格式:

輸入數目不定的多對字符串,每行兩個,以空格分開。 例如:filename filepathTom Jack

輸出格式:

返回兩個字符串的最大前綴,例如:The common prefix is fileNo common prefix

輸入樣例:

filename filepath Tom Jack

輸出樣例:

The common prefix is file No common prefix

解法:

 1 public class Main6 {
 2     public static String prefix(String s1, String s2){
 3         StringBuffer stringBuffer = new StringBuffer("");
 4         StringBuffer no = new StringBuffer("No common prefix");
 5         StringBuffer yes = new StringBuffer("The common prefix is ");
 6         boolean hasPrefix = false;
 7         int i=0;
 8         while (i<s1.length()&&i<s2.length()){
 9             if (s1.charAt(i)==s2.charAt(i)) {
10                 hasPrefix=true;
11                 stringBuffer.append(s1.charAt(i));
12                 i++;
13             }
14             else {
15                 break;
16             }
17         }
18         if (hasPrefix){
19             stringBuffer=yes.append(stringBuffer);
20         }else{
21             stringBuffer=no.append(stringBuffer);
22         }
23         return new String(stringBuffer);
24     }
25     public static void main(String[] args){
26         String string1,string2;
27         Scanner in = new Scanner(System.in);
28         while (in.hasNext()) {
29             string1 = in.next();
30             string2 = in.next();
31             System.out.println(prefix(string1, string2));
32         }
33         in.close();
34     }
35 }
View Code

7.找出最大的對象

(找出最大的對象)編寫一個方法,返回對象數組中最大的對象。方法簽名以下:public static Object max(Comparable[] a)全部對象都是Comparable接口的實例。對象在數組中的順序是由compareTo方法決定的。編寫測試程序,從鍵盤輸入5個字符串和5個整數,建立一個由5個字符串構成的數組、一個由5個整數構成的數組。找出數組中最大的字符串、整數並輸出。

輸入格式:

輸入Xi'an (輸入5個字符串,每行一個)BeijingShangHaiGuangZhouShenZhen8 9 12 7 6 (輸入5個整數,以空格分隔)

輸出格式:

輸出 Max string is Xi'an (輸出最大的字符串)Max integer is 12 (輸出最大的整數)

輸入樣例:

France Japan German China India 6 34 89 168 53

輸出樣例:

Max string is Japan Max integer is 168

解法:

 1 import java.util.Arrays;
 2 import java.util.Scanner;
 3 public class Main {
 4    
 5     public static void main(String[] args) {
 6         @SuppressWarnings("resource")
 7         Scanner sc = new Scanner(System.in);
 8             String [] list1 = new String[5];
 9             int [] list2 = new int[5];
10          for(int i=0;i<5;i++){
11              String str1 = sc.next();
12              list1[i]=str1;           
13          }
14          for(int i=0;i<5;i++){
15              int str2 = sc.nextInt();
16              list2[i]=str2;           
17          }
18          
19          
20            Arrays.sort(list1);
21            Arrays.sort(list2);
22            System.out.println("Max string is "+list1[4]);
23            System.out.println("Max integer is "+list2[4]);
24     }
25 }
View Code

8. 使用公曆類GregorianCalendar

使用公曆類 GregorianCalendar,公曆類 GregorianCalendar有方法setTimeInMillis(long);能夠用它來設置從1970年1月1日算起的一個特定時間。請編程從鍵盤輸入一個長整型的值,而後輸出對應的年、月和日。例如輸入:1234567898765,輸出:2009-1-14

輸入格式:

輸入1234567898765 (毫秒數)

輸出格式:

輸出2009-1-14 (輸出年、月和日,實際應該是2月,由於Java API 從0開始計算月份)

輸入樣例:

1450921070108

輸出樣例:

2015-11-24

解法:

 1 import java.util.Calendar;
 2 import java.util.Scanner;
 3 
 4 public class Main {
 5     public static void main(String [] args){
 6         Scanner scanner = new Scanner(System.in);
 7         String s = scanner.nextLine();
 8         Calendar ca = Calendar.getInstance();
 9         ca.setTimeInMillis(Long.parseLong(s));
10         System.out.println(ca.get(Calendar.YEAR ) + "-"
11                 + ca.get(Calendar.MONTH) + "-" + ca.get(Calendar.DAY_OF_MONTH));
12     }
13 
14 }
View Code

9.查找電話號碼

文件phonebook1.txt中有若干聯繫人的姓名和電話號碼。高富帥 13312342222白富美 13412343333孫悟空 13512345555唐三藏 13612346666豬悟能 13712347777沙悟淨 13812348888請你編寫一個簡單的通訊錄程序,當從鍵盤輸入一個姓名時查找到對應的電話號碼並輸出。若是沒找到則顯示Not found. 因爲目前的自動裁判系統暫時不能支持用戶讀入文件,咱們編寫程序從鍵盤輸入文件中的姓名和電話號碼,當輸入的名字爲noname時,表示結束。noname後面有一個名字,須要查找其對應的電話號碼。

輸入格式:

高富帥 13312342222白富美 13412343333孫悟空 13512345555唐三藏 13612346666豬悟能 13712347777沙悟淨 13812348888noname (表示結束)唐三藏 (須要查找此人的電話號碼)

輸出格式:

13612346666 (輸出對應的電話號碼)

輸入樣例:

白富美 13412343333 孫悟空 13512345555 唐三藏 13612346666 豬悟能 13712347777 沙悟淨 13812348888 noname 白骨精

輸出樣例:

Not found.

解法:

方法一:

 1 import java.util.HashMap;
 2 import java.util.Map;
 3 import java.util.Scanner;
 4 
 5 public class Main4 {
 6 
 7     public static void main(String[] args) {
 8         Map<String,String> phone = new HashMap<String,String>();
 9         Scanner in = new Scanner(System.in);
10         while(true) {
11             String name = in.next();
12             if(name.equals("noname")) {
13                 break;
14             }
15             String phoneNumber = in.next();
16             phone.put(name, phoneNumber);
17         }
18         String s = in.next();
19         if(!phone.containsKey(s)) {
20             System.out.println("Not Found。");
21         }
22         else{
23             System.out.println(phone.get(s));
24         }
25         in.close();
26     }
27 }
View Code

方法二:(優化)

 1 import java.util.HashMap;
 2 import java.util.Map;
 3 import java.util.Scanner;
 4 
 5 public class Main {
 6     public static void main(String[] args) {
 7         Map<String, String> list = new HashMap<String, String>();
 8         String s;
 9         Scanner scanner = new Scanner(System.in);
10         String a= scanner.next();
11 
12         while (!a.equals("noname")) {
13             s = scanner.next();
14 
15             list.put(a, s);
16             a = scanner.next();
17 
18         }
19         String string = scanner.next();
20         if (list.get(string) != null) {
21             System.out.println(list.get(string));
22         }
23 
24         else {
25             System.out.println("Not found.");
26         }
27 
28     }
29 }
View Code

10.日期加減

請編程從鍵盤輸入一個長整型的值,該值表示從1970年1月1日算起的一個特定時間(毫秒數),以此時間構造一個日期對象。再輸入一個普通整型值,該值表示天數,加上該天數後,而後輸出對應的年、月、日。

輸入格式:

1234567898765 (第一行輸入一個長整型數)

158 (第二行輸入一個普通整型數,表示天數)

輸出格式:

2009-02-14

2009-07-22

輸入樣例:

1234567898765 158

輸出樣例:

2009-02-14 2009-07-22

解法:

 1 import java.text.SimpleDateFormat;
 2 import java.util.*;
 3 public class Main3 {
 4 
 5     public static void main(String[] args) {
 6         Scanner in = new Scanner(System.in);
 7         Calendar date = Calendar.getInstance();
 8         SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd");
 9         long l = in.nextLong();
10         Long i = in.nextLong();
11         date.setTimeInMillis(l);
12         long n=i*24*60*60*1000+l;
13         Date date2 = new Date(n); 
14         System.out.println(format.format(date.getTime()));
15         System.out.println(format.format(date2));
16     }
17 }
View Code

11.字符串替換

將文本文件中指定的字符串替換成新字符串。 因爲目前的OJ系統暫時不能支持用戶讀入文件,咱們編寫程序從鍵盤輸入文件中的內容,當輸入的一行爲end時,表示結束。end後面有兩個字符串,要求用第二個字符串替換文本中全部的第一個字符串。

輸入格式:

Xi’an Institute of Posts and Telecommunications is co-designed and implemented by the People’s Government of Shaanxi Province and the Ministry of Industry and Information Technology. The Institute is located in Xi’an, a historic city in Northwest China, famous for its magnificent ancient culture.end (表示結束)Institute (第一個字符串,要求用第二個字符串替換)University (第二個字符串)

輸出格式:

Xi’an University of Posts and Telecommunications is co-designed and implemented by the People’s Government of Shaanxi Province and the Ministry of Industry and Information Technology.The University is located in Xi’an, a historic city in Northwest China, famous for its magnificent ancient culture.

輸入樣例:

Xi’an Institute of Posts and Telecommunications is co-designed and implemented by the People’s Government of Shaanxi Province and the Ministry of Industry and Information Technology. The Institute is located in Xi’an, a historic city in Northwest China, famous for its magnificent ancient culture. end Institute University

輸出樣例:

Xi’an University of Posts and Telecommunications is co-designed and implemented by the People’s Government of Shaanxi Province and the Ministry of Industry and Information Technology.The University is located in Xi’an, a historic city in Northwest China, famous for its magnificent ancient culture.

解法:

 1 import java.util.ArrayList;
 2 import java.util.Scanner;
 3 
 4 public class Tihua5_2 {
 5 
 6     public static void main(String[] args) {
 7         ArrayList<String> ls = new ArrayList<String>();
 8         Scanner in = new Scanner(System.in);
 9         int len = 0;
10         ls.add(in.nextLine());
11         while (ls.get(len).compareTo("end") != 0) {
12             len++;
13             ls.add(in.nextLine());
14         }
15         String a = in.nextLine();
16         String b = in.nextLine();
17         String[] ss = new String[len];
18         for (int i = 0; i < len; i++)
19             ss[i] = ls.get(i).replace(a, b);
20         for (int i = 0; i < len; i++)
21             System.out.println(ss[i]);
22         in.close();
23     }
24 
25 }
View Code

12.大數整除

請編寫程序,從鍵盤輸入一個整數n,找出大於long.MAX_VALUE且能被n整除的前3個數字。

輸入格式:

輸入一個做爲除數的整數n,例如: 17

輸出格式:

輸出大於long.MAX_VALUE且能被n整除的前3個數字,例以下列三個數能被17整除且大於long.MAX_VALUE: 922337203685477581692233720368547758339223372036854775850

輸入樣例:

103

輸出樣例:

9223372036854775832 9223372036854775935 9223372036854776038

解法:

方法一:

 1 import java.math.BigInteger;
 2 import java.util.Scanner;
 3 
 4 public class Main4 {
 5     public static void main(String[] args) throws InterruptedException {
 6         BigInteger bigInteger = new BigInteger(String.valueOf(Long.MAX_VALUE));
 7         int count = 1;
 8         Scanner in = new Scanner(System.in);
 9         int n = in.nextInt();
10         while (count <= 3) {
11             if (bigInteger.mod(BigInteger.valueOf(n)).intValue() == 0) {
12                 System.out.println(bigInteger.toString());
13                 count++;
14             }
15             bigInteger = bigInteger.add(BigInteger.valueOf(1));
16         }
17 
18     }
19 
20 }
View Code

方法 二:

 1 import java.math.BigDecimal;
 2 import java.util.Scanner;
 3 
 4 public class Main {
 5     public static void main(String[] args) throws InterruptedException {
 6         BigDecimal bigDecimal = new BigDecimal(String.valueOf(Long.MAX_VALUE));
 7         // valueOf()返回長參數的字符串表示形式
 8         int count = 1;
 9         Scanner in = new Scanner(System.in);
10         int n = in.nextInt();
11         while (count <= 3) {
12       if (bigDecimal.divideAndRemainder(BigDecimal.valueOf(n))[1].intValue() == 0) {
13                 // intValue()將此BigInteger轉換爲int。
14                 System.out.println(bigDecimal.toString());
15                 // toString()返回此BigInteger的十進制String表示形式
16                 count++;
17             }
18       bigDecimal = bigDecimal.add(BigDecimal.valueOf(1));
19         }
20     }
21 }
View Code

方法三:(優化)

 1 import java.math.BigInteger;
 2 import java.util.Scanner;
 3 
 4 public class Main{
 5     public static void main(String[] args) {
 6         Scanner in = new Scanner(System.in);
 7         BigInteger m = new BigInteger(Long.MAX_VALUE + "");
 8         String s = in.next();
 9         BigInteger n = new BigInteger(s);
10         BigInteger zero = new BigInteger("0");
11         m = m.add(BigInteger.ONE);
12         int count = 0;
13         
14         while(count<3) {
15             if(division(m,n).compareTo(zero)==0) {
16                 System.out.println(m);
17                 count++;
18             }
19             m = m.add(BigInteger.ONE);
20         }
21         in.close();
22     }
23     public static BigInteger division(BigInteger m,BigInteger n) {
24         return m.divideAndRemainder(n)[1];
25     }
26 }
View Code

13.求幾何形狀的面積之和

(求幾何形狀的面積之和)編寫一個方法,求數組中全部幾何形狀對象的面積之和。方法簽名以下:

public static double sumArea(shape[] a)

編寫測試程序,繼承抽象類shape獲得圓形類Circle和矩形類Rectangle。

abstract class shape {// 抽象類

/ 抽象方法 求面積 /

public abstract double getArea();

/ 抽象方法 求周長 /

public abstract double getPerimeter();

}

建立四個對象(兩個圓和兩個矩形)的數組,而後使用sumArea方法求出它們的總面積。(保留4位小數)

輸入格式:

輸入 1.1 (第1個圓形的半徑) 1.8 (第2個圓形的半徑) 2.3 3.8 (第1個矩形的寬和高) 5.9 16.8 (第2個矩形的寬和高)

輸出格式:

The total area is 121.8401 (總面積,保留4位小數)

輸入樣例:

2.18 3.16 2.9 5.76 4.8 9.23

輸出樣例:

   The total area is 107.3088

解法:

 1 import java.util.Scanner;
 2 
 3 abstract class shape {
 4     public abstract double getArea();
 5 
 6     public abstract double getPerimeter();
 7 }
 8 
 9 class Circle extends shape {
10     private double r;
11 
12     public Circle(double r) {
13         this.r = r;
14     }
15 
16     @Override
17     public double getArea() {
18         return Math.PI * r * r;
19     }
20 
21     @Override
22     public double getPerimeter() {
23         return 2 * r * Math.PI;
24     }
25 
26 }
27 
28 class Rectangle extends shape {
29     private double side;
30     private double side1;
31 
32     public Rectangle(double side, double side1) {
33         this.side = side;
34         this.side1 = side1;
35     }
36 
37     @Override
38     public double getArea() {
39         return side * side1;
40     }
41 
42     @Override
43     public double getPerimeter() {
44         return (side + side1) * 2;
45     }
46 
47 }
48 
49 public class Main {
50     public static double sumArea(shape[] a) {
51         double sum = 0;
52         for (int i = 0; i < a.length; i++) {
53             sum += a[i].getArea();
54         }
55         return sum;
56     }
57 
58     public static void main(String[] args) {
59         Scanner in = new Scanner(System.in);
60         shape[] a = new shape[4];
61         double r = in.nextDouble();
62         a[0] = new Circle(r);
63         r = in.nextDouble();
64         a[1] = new Circle(r);
65 
66         double w = in.nextDouble();
67         double h = in.nextDouble();
68         a[2] = new Rectangle(w, h);
69         w = in.nextDouble();
70         h = in.nextDouble();
71         a[3] = new Rectangle(w, h);
72 
73         in.close();
74         System.out.println(String.format("The total area is " + "%.4f", sumArea(a)));
75 
76     }
77 }
View Code

14.數字格式異常

(NumberFormatException數字格式異常)編寫一個程序,提示用戶讀取兩個整數,而後顯示他們的和。程序應該在輸入不正確時提示用戶再次輸入數字。

輸入格式:

i 9 (第1次輸入) l 8 (第2次輸入) 5 6 (第3次輸入)

輸出格式:

Incorrect input and re-enter two integers: (第1次輸出提示) Incorrect input and re-enter two integers: (第2次輸出提示) Sum is 11 (輸出結果)

輸入樣例:

i 9 l 8 5 6

輸出樣例:

Incorrect input and re-enter two integers: Incorrect input and re-enter two integers: Sum is 11

解法:

 1 import java.util.InputMismatchException;
 2 import java.util.Scanner;
 3 import java.text.DecimalFormat;
 4 
 5 public class Main {
 6     public static void main(String[] args) {
 7         Scanner in =new Scanner(System.in);
 8         int m,n;
 9         while(true){
10         try{
11             m=in.nextInt();
12             n=in.nextInt();
13             System.out.println("Sum is "+(m+n));
14             break;
15             
16         }catch(InputMismatchException e){
17             System.out.println("Incorrect input and re-enter two integers:");
18             in.nextLine();
19             continue;
20         }
21      }
22     }
23 }
View Code

15.查找成績並折算後輸出

 文件:期中考試成績.txt中有若干學生的姓名和數學期中考試成績。 Smith 67 Anderson 75 Lewis 83 Cook 58 David 96 請你編寫一個簡單的查詢成績程序,當從鍵盤輸入一個姓名時查找到他的數學期中考試分數並按照21%折算後輸出。若是沒找到則顯示Not found. 因爲目前的OJ系統暫時不能支持用戶讀入文件,咱們編寫程序從鍵盤輸入文件中的姓名和成績,當輸入的名字爲noname時,表示結束。noname後面有一個名字,須要查找其成績。

輸入格式:

Smith 67

Anderson 75

Lewis 83

Cook 58

David 96

noname (表示結束)

Bill

輸出格式:

Not found.

輸入樣例:

Smith 67 Anderson 75 Lewis 83 Cook 58 David 96 noname Lewis

輸出樣例:

17.43

源代碼:

方法一:

 1 import java.util.HashMap;
 2 import java.util.Map;
 3 import java.util.Scanner;
 4 
 5 public class Main {
 6 
 7     public static void main(String[] args) {
 8         Map<String,Double> phone = new HashMap<String,Double>();
 9         Scanner in = new Scanner(System.in);
10         while(true) {
11             String name = in.next();
12             if(name.equals("noname")) {
13                 break;
14             }
15             Double phoneNumber = in.nextDouble();
16             phone.put(name, phoneNumber);
17         }
18         String s = in.next();
19         if(!phone.containsKey(s)) {
20             System.out.println("Not Found。");
21         }
22         else{
23             System.out.println((phone.get(s))*0.21);
24         }
25         in.close();
26     }
27 }
View Code

方法二(優化):

 1 import java.util.HashMap;
 2 import java.util.Map;
 3 import java.util.Scanner;
 4 
 5 
 6 public class Main{
 7 public static void main(String[] args){
 8     Map<String, Integer> list=new HashMap<String, Integer>();
 9     int a;
10     Scanner scanner=new Scanner(System.in);
11     String aString=scanner.next();
12 
13     while(!aString.equals("noname"))
14     {
15         a=scanner.nextInt();
16         
17         list.put(aString, a);
18         aString=scanner.next();
19         
20     }
21     String string=scanner.next();
22     if(list.get(string) != null){
23         System.out.println(list.get(string)*0.21);
24     }
25 
26     else {
27         System.out.println("Not found.");
28     }
29     
30     
31     
32 }
33 }
View Code

23.找素數

請編寫程序,從鍵盤輸入兩個整數m,n,找出等於或大於m的前n個素數。

輸入格式:

第一個整數爲m,第二個整數爲n;中間使用空格隔開。例如: 103 3

輸出格式:

從小到大輸出找到的等於或大於m的n個素數,每一個一行。例如: 103 107 109

輸入樣例:

9223372036854775839 2

輸出樣例:

9223372036854775907 9223372036854775931

解法:

 1 import java.math.BigInteger;
 2 import java.util.Scanner;
 3 public class Main {
 4     public static void main(String[] args){
 5         Scanner in = new Scanner(System.in);
 6         BigInteger m;
 7         int n;
 8 
 9         m=in.nextBigInteger();
10         n=in.nextInt();
11         int cnt=0;
12         while (cnt<n){
13             if (m.isProbablePrime(100)){
14                 System.out.println(m);
15                 cnt++;
16             }
17             m=m.nextProbablePrime();
18         }
19         in.close();
20     }
21 }
View Code

24.計算正五邊形的面積和周長

從下列的抽象類shape類擴展出一個正五邊形(regular pentagon)類RPentagon,這個類將正五邊形的邊長做爲私有成員,類中包含初始化這個值的構造方法。public abstract class shape {// 抽象類/ 抽象方法 求面積 / public abstract double getArea();/ 抽象方法 求周長 / public abstract double getPerimeter(); }請編程從鍵盤輸入正五邊形的邊長值,建立一個正五邊形對象,而後輸出正五邊形的面積和正五邊形的周長。計算正五邊形的面積公式爲: S=5a^2/(4tan(36度))其中a爲邊長。 或者:S=(1/4)a^2√(25+10√5) 輸出結果保留4位小數。

輸入格式:

輸入正五邊形的邊長。例如:5

輸出格式:

輸出正五邊形的面積和周長。第一行輸出面積,第二行輸出周長。例如: 43.011925

輸入樣例:

16.8

輸出樣例:

485.5875 84

源代碼:

方法一:

 1 import java.util.Scanner;
 2 abstract class Shape{
 3     abstract double getArea();
 4     abstract double getPerimeter();
 5 }
 6 class RPentagon extends Shape{
 7    private double a;
 8    public RPentagon(double a){
 9        this.a = a;
10    }
11    public double getArea(){
12         return 0.25*a*a*Math.sqrt(25+10*Math.sqrt(5));
13     }
14     public double getPerimeter() {
15         return 5*a;
16     }
17     
18 }
19 public class Main {
20 
21     public static void main(String[] args) {
22         Scanner in = new Scanner(System.in);
23         double b=in.nextDouble();
24         RPentagon r= new RPentagon(b);
25         System.out.println(String.format("%.4f",r.getArea()));
26         System.out.println((int)r.getPerimeter());
27     }
28 
29 }
View Code

方法二:(優化)

 1 import java.lang.Math;
 2 import java.math.BigDecimal;
 3 import java.text.DecimalFormat;
 4 import java.util.Scanner;
 5 public class Main {
 6     public static void main(String[] args){
 7     Scanner in=new Scanner(System.in);
 8     double a=in.nextDouble();
 9     Bian b1=new Bian(a);
10     
11     DecimalFormat df1 = new DecimalFormat("#.####"); 
12     System.out.println(df1.format(b1.getArea()));
13     System.out.println(df1.format(b1.getPerimeter()));
14     } 
15 }
16 abstract class shape{// 抽象類
17      public abstract double getArea();
18      public abstract double getPerimeter(); 
19 }
20 class Bian extends shape{
21     private double a;
22     public Bian(double a){
23         this.a=a;
24     }
25     public double getArea(){
26         double s=a*a/4*(Math.sqrt(25+10*Math.sqrt(5.0)));
27         //BigDecimal s1=new BigDecimal(s);
28         //double s2=s1.setScale(4,BigDecimal.ROUND_HALF_UP).doubleValue();  
29       return s;
30     }
31     public double getPerimeter(){
32         return a*5;
33     }
34 }
View Code

25.求階乘factorial 

編程從鍵盤輸入一個整數,計算出階乘並輸出。

輸入格式:

輸入 39

輸出格式:

輸出:20397882081197443358640281739902897356800000000

輸入樣例:

58

輸出樣例:

2350561331282878571829474910515074683828862318181142924420699914240000000000000

解法:

 1 import java.math.BigInteger;
 2 import java.util.Scanner;
 3 
 4 public class Main {
 5     public static void main(String args[]) {
 6         BigInteger sum = new BigInteger("1");
 7         Scanner in = new Scanner(System.in);
 8         int n = in.nextInt();
 9         for(int i = 1; i<= n;i++){
10             String temp1 = Integer.toString(i); 
11             BigInteger temp2 = new  BigInteger(temp1); 
12             sum = sum.multiply(temp2);
13         }
14         System.out.println(sum);
15         
16     }
17 }
View Code

26 .字符串替換   

將文本文件中指定的字符串替換成新字符串。 因爲目前的OJ系統暫時不能支持用戶讀入文件,咱們編寫程序從鍵盤輸入文件中的內容,當輸入的一行爲end時,表示結束。end後面有兩個字符串,要求用第二個字符串替換文本中全部的第一個字符串。

輸入格式:

複製代碼
Xi’an Institute of Posts and Telecommunications is co-designed and implemented by the People’s Government of Shaanxi Province and the Ministry of Industry and Information Technology. The Institute is located in Xi’an, a historic city in Northwest China, famous for its magnificent ancient culture.

end (表示結束)

Institute (第一個字符串,要求用第二個字符串替換)

University (第二個字符串)
複製代碼

輸出格式:

Xi’an University of Posts and Telecommunications is co-designed and implemented by the People’s Government of Shaanxi Province and the Ministry of Industry and Information Technology.The University is located in Xi’an, a historic city in Northwest China, famous for its magnificent ancient culture.

輸入樣例:

複製代碼
Xi’an Institute of Posts and Telecommunications is co-designed and implemented by the People’s Government of Shaanxi Province and the Ministry of Industry and Information Technology.
The Institute is located in Xi’an, a historic city in Northwest China, famous for its magnificent ancient culture.
end
Institute
University
複製代碼

輸出樣例:

Xi’an University of Posts and Telecommunications is co-designed and implemented by the People’s Government of Shaanxi Province and the Ministry of Industry and Information Technology.The University is located in Xi’an, a historic city in Northwest China, famous for its magnificent ancient culture.
解法:
 1 import java.io.*;
 2 import java.util.*;
 3 
 4 public class Main{
 5     public static void main(String[] args) throws IOException {
 6         String x = null;
 7         Scanner in = new Scanner(System.in);
 8         String str = "";
 9         x = in.nextLine();
10         while (!x.equals("end")) {
11             str += x;
12             x = in.nextLine();
13         }
14         String a = in.nextLine();
15         String b = in.nextLine();
16         in.close();
17         String str1 = str.replace(a, b+" ");
18         System.out.println(str1);
19 
20     }
21 }
View Code

27.找出最大的對象  

(找出最大的對象)編寫一個方法,返回對象數組中最大的對象。方法簽名以下:public static Object max(Comparable[] a)全部對象都是Comparable接口的實例。對象在數組中的順序是由compareTo方法決定的。編寫測試程序,從鍵盤輸入5個字符串和5個整數,建立一個由5個字符串構成的數組、一個由5個整數構成的數組。找出數組中最大的字符串、整數並輸出。

輸入格式:

 1 輸入
 2 
 3 Xi'an (輸入5個字符串,每行一個)
 4 
 5 Beijing
 6 
 7 ShangHai
 8 
 9 GuangZhou
10 
11 ShenZhen
12 
13 8 9 12 7 6 (輸入5個整數,以空格分隔)
View Code

輸出格式:

輸出 Max string is Xi'an (輸出最大的字符串)

Max integer is 12 (輸出最大的整數)

輸入樣例:

1 France
2 Japan
3 German
4 China
5 India
6 6 34 89 168 53
View Code

輸出樣例:

Max string is Japan
Max integer is 168

解法:

 1 import java.util.Arrays;
 2 import java.util.Scanner;
 3 public class Main {
 4    
 5     public static void main(String[] args) {
 6         @SuppressWarnings("resource")
 7         Scanner sc = new Scanner(System.in);
 8             String [] list1 = new String[5];
 9             int [] list2 = new int[5];
10          for(int i=0;i<5;i++){
11              String str1 = sc.next();
12              list1[i]=str1;           
13          }
14          for(int i=0;i<5;i++){
15              int str2 = sc.nextInt();
16              list2[i]=str2;           
17          }
18          
19          
20            Arrays.sort(list1);
21            Arrays.sort(list2);
22            System.out.println("Max string is "+list1[4]);
23            System.out.println("Max integer is "+list2[4]);
24     }
25 }
View Code

28. 給定兩個點的座標,求解兩個點的距離。

輸入格式:

給定四個浮點數,做爲線段的兩個點。

輸出格式:

輸出該線段的距離。

輸入樣例:

0 0 1.0 1.0

輸出樣例:

The distance is 1.41
解法:
 1 import java.util.Scanner;
 2 
 3 public class Main{
 4 
 5     public static void main(String[] args) {
 6          Scanner in = new Scanner(System.in);
 7          double a1 = in.nextDouble();
 8          double a2 = in.nextDouble();
 9          double a3 = in.nextDouble();
10          double a4 = in.nextDouble();
11          double s = Math.sqrt(Math.pow((a3-a1), 2)+Math.pow((a3-a1),2));
12          System.out.println(String.format("The distance is "+"%.2f", s));
13          
14     }
15 
16 }
View Code

29.檢驗密碼

  一些網站設定了一些制定密碼的規則。編寫一個方法,檢驗一個字符串是否合法的密碼。假設密碼規則以下: 密碼必須至少有8個字符。 密碼只能包含字母和數字。 密碼必須至少有2個數字。 請編寫一個程序,提示用戶輸入密碼,若是改密碼符合規則就顯示「Valid password」,不然顯示「Invalid password」

解法:

 1 public class Main{
 2     @SuppressWarnings("resource")
 3     public static void main(String[] args) {
 4         // Prompt the user to enter a password
 5         java.util.Scanner input = new java.util.Scanner(System.in);
 6         //System.out.print("Enter a string for password: ");
 7         String s = input.nextLine();
 8 
 9         if (isValidPassword(s) == true) {//第一個空格
10           System.out.println("Valid password");
11         }
12         else {
13           System.out.println("Invalid password");
14         }
15       }
16 
17     /** 檢查字符串是不是有效的密碼 */
18       public static boolean isValidPassword(String s) {
19         // 只有數字和字母?charAt(i)(數字判斷)
20         for (int i = 0; i < s.length(); i++) {
21           if (!Character.isLetter(s.charAt(i)) && !Character.isDigit(s.charAt(i)))//第二個空格
22             return false;
23         }
24         
25         // 檢查長度
26         if (s.length() < 8)//第三個空格
27           return false;
28         
29         // 計數位數
30         int count = 0;
31         for (int i = 0; i < s.length(); i++) {
32           if (Character.isDigit(s.charAt(i)))
33             count++;
34         }
35         
36         if (count >= 2)//第四個空格
37           return true;
38         else 
39           return false;
40       }
41 }
View Code

30.二位數組排序

  在一個二維數組中,每一行都按照從左到右遞增的順序排序,每一列都按照從上到下遞增的順序排序,請完成一個函數,輸入這樣的一個二維數組和一個整數,判斷數組中是否有該整數。

 1 #include <stdio.h>
 2 #include<stdbool.h>
 3 int main()
 4 {
 5     int find(int  matrix[4][4], int rows, int columns, int number);
 6     int a[4][4] = {{ 1, 2, 8, 9 }, 
 7                    { 2, 4, 9, 12 }, 
 8                    { 4, 7, 10, 13 }, 
 9                    { 6, 8, 11, 15 } };
10     int result = find(a, 4, 4, 12);
11     if (result == 1)
12         printf("已經查到\n");
13     else
14         printf("數組中沒有此元素\n");
15     return 0;
16 }
17 int find(int  matrix[4][4], int rows, int columns, int number)
18 {
19     bool found = false;
20     if (matrix != NULL && rows>0 && columns>0)
21     {
22         int a = 0;
23         int b = columns - 1;
24         while (a<rows && b >= 0)
25         {
26             if (matrix[a][b] == number)
27             {
28                 found = true;
29                 break;
30             }
31             else if (matrix[a][b]> number)
32                 --b;
33             else
34                 ++a;
35         }
36     }
37     return found;
38 }
View Code

31.打印矩陣

  輸入一個矩陣,按照從裏向外的順序依次打印出每個數字。

代碼:

  1 #include <cstdio>
  2  
  3 void PrintMatrixInCircle(int** numbers, int columns, int rows, int start);
  4 void printNumber(int number);
  5  
  6 void PrintMatrixClockwisely(int** numbers, int columns, int rows)
  7 {
  8     if (numbers == nullptr || columns <= 0 || rows <= 0)
  9         return;
 10  
 11     int start = 0;
 12  
 13     while (columns > start * 2 && rows > start * 2)
 14     {
 15         PrintMatrixInCircle(numbers, columns, rows, start);
 16  
 17         ++start;
 18     }
 19 }
 20  
 21 void PrintMatrixInCircle(int** numbers, int columns, int rows, int start)
 22 {
 23     int endX = columns - 1 - start;
 24     int endY = rows - 1 - start;
 25  
 26     // 從左到右打印一行
 27     for (int i = start; i <= endX; ++i)
 28     {
 29         int number = numbers[start][i];
 30         printNumber(number);
 31     }
 32  
 33     // 從上到下打印一列
 34     if (start < endY)
 35     {
 36         for (int i = start + 1; i <= endY; ++i)
 37         {
 38             int number = numbers[i][endX];
 39             printNumber(number);
 40         }
 41     }
 42  
 43     // 從右到左打印一行
 44     if (start < endX && start < endY)
 45     {
 46         for (int i = endX - 1; i >= start; --i)
 47         {
 48             int number = numbers[endY][i];
 49             printNumber(number);
 50         }
 51     }
 52  
 53     // 從下到上打印一行
 54     if (start < endX && start < endY - 1)
 55     {
 56         for (int i = endY - 1; i >= start + 1; --i)
 57         {
 58             int number = numbers[i][start];
 59             printNumber(number);
 60         }
 61     }
 62 }
 63  
 64 void printNumber(int number)
 65 {
 66     printf("%d\t", number);
 67 }
 68  
 69 // ====================測試代碼====================
 70 void Test(int columns, int rows)
 71 {
 72     printf("Test Begin: %d columns, %d rows.\n", columns, rows);
 73  
 74     if (columns < 1 || rows < 1)
 75         return;
 76  
 77     int** numbers = new int*[rows];
 78     for (int i = 0; i < rows; ++i)
 79     {
 80         numbers[i] = new int[columns];
 81         for (int j = 0; j < columns; ++j)
 82         {
 83             numbers[i][j] = i * columns + j + 1;
 84         }
 85     }
 86  
 87     PrintMatrixClockwisely(numbers, columns, rows);
 88     printf("\n");
 89  
 90     for (int i = 0; i < rows; ++i)
 91         delete[](int*)numbers[i];
 92  
 93     delete[] numbers;
 94 }
 95  
 96 int main(int argc, char* argv[])
 97 {
 98     /*
 99     1
100     */
101     Test(1, 1);
102  
103     /*
104     1    2
105     3    4
106     */
107     Test(2, 2);
108  
109     /*
110     1    2    3    4
111     5    6    7    8
112     9    10   11   12
113     13   14   15   16
114     */
115     Test(4, 4);
116  
117     /*
118     1    2    3    4    5
119     6    7    8    9    10
120     11   12   13   14   15
121     16   17   18   19   20
122     21   22   23   24   25
123     */
124     Test(5, 5);
125  
126     /*
127     1
128     2
129     3
130     4
131     5
132     */
133     Test(1, 5);
134  
135     /*
136     1    2
137     3    4
138     5    6
139     7    8
140     9    10
141     */
142     Test(2, 5);
143  
144     /*
145     1    2    3
146     4    5    6
147     7    8    9
148     10   11   12
149     13   14   15
150     */
151     Test(3, 5);
152  
153     /*
154     1    2    3    4
155     5    6    7    8
156     9    10   11   12
157     13   14   15   16
158     17   18   19   20
159     */
160     Test(4, 5);
161  
162     /*
163     1    2    3    4    5
164     */
165     Test(5, 1);
166  
167     /*
168     1    2    3    4    5
169     6    7    8    9    10
170     */
171     Test(5, 2);
172  
173     /*
174     1    2    3    4    5
175     6    7    8    9    10
176     11   12   13   14    15
177     */
178     Test(5, 3);
179  
180     /*
181     1    2    3    4    5
182     6    7    8    9    10
183     11   12   13   14   15
184     16   17   18   19   20
185     */
186     Test(5, 4);
187  
188     return 0;
189 }
View Code

32.輸出二叉樹的鏡像

代碼:

 1 #include<stdio.h>
 2 #include<stdlib.h>
 3 typedef struct node
 4 {
 5     char value;
 6     struct node *lchild;
 7     struct node *rchild;
 8 }TreeNode,*Tree;
 9 //頭插法建立二叉樹
10 Tree CreateTree(Tree &t)
11 {
12     char ch;
13     scanf_s("%c", &ch);
14     if (ch == '#')
15         t = NULL;
16     else
17     {
18         t = (Tree)malloc(sizeof(TreeNode));
19         if (!t)
20         {
21             printf("分配內存出錯!");
22             return NULL;
23         }
24         t->value = ch;
25         CreateTree(t->lchild);
26         CreateTree(t->rchild);
27     }
28     return t;
29 }
30 //求二叉樹鏡像
31 void MirrorRecursively(Tree pNpde)
32 {
33     if (pNpde == NULL)
34         return ;
35     if (pNpde->lchild == NULL && pNpde->rchild == NULL)
36         return ;
37     Tree pTemp = pNpde->lchild;
38     pNpde->lchild = pNpde->rchild;
39     pNpde->rchild = pTemp;
40     if (pNpde->lchild)
41         MirrorRecursively(pNpde->lchild);
42     if (pNpde->rchild)
43         MirrorRecursively(pNpde->rchild);
44 }
45 //先序遞歸遍歷
46 void PreOrder(Tree T)
47 {
48     if (T)
49     {
50         printf("%c",T->value);
51         PreOrder(T->lchild);
52         PreOrder(T->rchild);
53     }
54 }
55 int main()
56 {
57     Tree T;
58     printf("建立二叉樹,‘#’表明空:");
59     CreateTree(T);
60     printf("先序遍歷二叉樹:");
61     PreOrder(T);
62     MirrorRecursively(T);
63     if (T)
64     {
65         printf("\n先序遍歷鏡像二叉樹: ");
66         PreOrder(T);
67     }
68     else
69         printf("建立的樹爲空");
70     printf("\n");
71     return 0;
72 }
73 /*
74 建立二叉樹,‘#’表明空:ABD##E##CF##G##
75 先序遍歷二叉樹:ABDECFG
76 先序遍歷鏡像二叉樹: ACGFBED
77 請按任意鍵繼續. . .
78  
79 建立二叉樹,‘#’表明空:#
80 先序遍歷二叉樹:建立的樹爲空
81 請按任意鍵繼續. . .
82  
83 */
View Code

33.判斷兩顆二叉樹B是否是A的子結構

 代碼:

  1 #include<stdio.h>
  2 #include<stdlib.h>
  3 typedef char ElemType;
  4 //樹結構
  5 typedef struct tree
  6 {
  7     ElemType data;
  8     struct tree * lchild;
  9     struct tree * rchild;
 10 }TreeNode, *Tree;
 11  
 12 Tree CreateTree(Tree &t)
 13 {
 14     char ch;
 15     scanf_s("%c", &ch);
 16     if (ch == '#')
 17         t = NULL;
 18     else
 19     {
 20         t = (Tree)malloc(sizeof(TreeNode));
 21         if (!t)
 22         {
 23             printf("分配內存出錯!");
 24             return NULL;
 25         }
 26         t->data = ch;
 27         CreateTree(t->lchild);
 28         CreateTree(t->rchild);
 29     }
 30     return t;
 31 }
 32 bool DoedTreeHaveTree(Tree pRoot1,Tree pRoot2)
 33 {
 34     if (pRoot2 == NULL)
 35         return true;
 36     if (pRoot1 == NULL)
 37         return false;
 38     if (pRoot1->data != pRoot2->data)
 39         return false;
 40     return DoedTreeHaveTree(pRoot1->lchild, pRoot2->lchild) && DoedTreeHaveTree(pRoot1->rchild,pRoot2->rchild);
 41 }
 42 bool HasSubtree(Tree pRoot1,Tree pRoot2)
 43 {
 44     bool result = false;
 45     if (pRoot1 != NULL && pRoot2 != NULL)
 46     {
 47         if (pRoot1->data == pRoot2->data)
 48             result = DoedTreeHaveTree(pRoot1,pRoot2);
 49         if (!result)
 50             result = HasSubtree(pRoot1->lchild,pRoot2);
 51         if (!result)
 52             result = HasSubtree(pRoot1->rchild,pRoot2);
 53     }
 54     return result;
 55 }
 56 int main()
 57 {
 58     Tree T1 = (Tree)malloc(sizeof(TreeNode));
 59     bool result=false;
 60     printf("\n按先序序列輸入A樹結點序列,'#'表明空:");
 61     T1=CreateTree(T1);
 62     fflush(stdin);   //清除緩存,此語句很重要
 63     Tree T2 = (Tree)malloc(sizeof(TreeNode));
 64     printf("\n按先序序列輸入B樹結點序列,'#'表明空:");
 65     T2 = CreateTree(T2);
 66     result = HasSubtree(T1,T2);
 67     printf("\n");
 68     if (result == true)
 69        printf("B是A的子結構\n\n");
 70     else
 71         printf("B不是A的子結構\n\n");
 72     return 0;
 73 }
 74  
 75  
 76 結果以下:
 77 按先序序列輸入A樹結點序列,'#'表明空:ABD##EF##G##C##
 78 按先序序列輸入B樹結點序列,'#'表明空:BD##E##
 79 B是A的子結構
 80 請按任意鍵繼續. . .
 81  
 82 按先序序列輸入A樹結點序列,'#'表明空:ABD##EF##G##C##
 83 按先序序列輸入B樹結點序列,'#'表明空:#
 84 B不是A的子結構
 85 請按任意鍵繼續. . .
 86  
 87 按先序序列輸入A樹結點序列,'#'表明空:#
 88 按先序序列輸入B樹結點序列,'#'表明空:BD##E##
 89 B不是A的子結構
 90 請按任意鍵繼續. . .
 91  
 92 按先序序列輸入A樹結點序列,'#'表明空:ABD##EF##G##C##
 93 按先序序列輸入B樹結點序列,'#'表明空:fq##n##
 94 B不是A的子結構
 95 請按任意鍵繼續. . .
 96  
 97  
 98 按先序序列輸入A樹結點序列,'#'表明空:ABD##EF##G##C##
 99 按先序序列輸入B樹結點序列,'#'表明空:A##
100 B是A的子結構
101 請按任意鍵繼續. . .
View Code

34. 合併兩個遞增鏈表使新的鏈表結點按照遞增排序。  

代碼:

 1 #include<stdio.h>
 2 #include"malloc.h"
 3 typedef struct node
 4 {
 5     struct node *next;
 6     int data;
 7 }*ListNode;
 8  
 9 //尾插法建立鏈表(不帶頭結點)
10 ListNode creatrList()
11 {
12     ListNode p = (ListNode)malloc(sizeof(ListNode));
13     ListNode s, q;
14     p->next = NULL;
15     q = p;
16     int x = 0;
17     scanf_s("%d", &x);
18     while (x != -1)
19     {
20         s = (ListNode)malloc(sizeof(ListNode));
21         s->next = NULL;
22         p->data = x;
23         p->next = s;
24         p = s;
25         scanf_s("%d", &x);
26     }
27     return q;
28 }
29 //合併兩個鏈表
30 ListNode Merge(ListNode AList,ListNode BList)
31 {
32     if (AList->next == NULL)
33         return BList;
34     else if (BList->next == NULL)
35         return AList;
36     ListNode CList = NULL;
37     if (AList->data < BList->data)
38     {
39         CList = AList;
40          CList->next = Merge(AList->next,BList);
41     }
42     else
43     {
44         CList = BList;
45         CList->next = Merge(AList, BList->next);
46     }
47     return CList;
48 }
49  
50 int main()
51 {
52     ListNode AList, BList,CList;
53     printf("建立A鏈表,以-1結束:");
54     AList = creatrList();
55     printf("建立B鏈表,以-1結束:");
56     BList = creatrList();
57     CList = Merge(AList, BList);
58     printf("合併後的列表爲:");
59     while (CList->next!=NULL)
60     {
61         printf("%3d",CList->data);
62         CList = CList->next;
63     }
64     printf("\n");
65     return 0;
66  
67 }
68 /*
69 建立A鏈表,以-1結束:1 2 3 5 6 7 -1
70 建立B鏈表,以-1結束:8 9 11 14 16 19 21 23 25 27 -1
71 合併後的列表爲:  1  2  3  5  6  7  8  9 11 14 16 19 21 23 25 27
72 請按任意鍵繼續. . .
73  
74 建立A鏈表,以-1結束:-1
75 建立B鏈表,以-1結束:1 2 3 4 5 6 7 8 -1
76 合併後的列表爲:  1  2  3  4  5  6  7  8
77 請按任意鍵繼續. . .
78  
79 建立A鏈表,以-1結束:1 2 3 4 5 6 7 8 -1
80 建立B鏈表,以-1結束:1 2 3 4 5 6 7 8 -1
81 合併後的列表爲:  1  1  2  2  3  3  4  4  5  5  6  6  7  7  8  8
82 請按任意鍵繼續. . .
83  
84  
85 */
View Code

35. 輸入一個鏈表的頭結點,反轉該鏈表並輸出反轉後鏈表的頭結點。 

代碼:

 1 #include<stdio.h>
 2 #include"malloc.h"
 3 typedef struct node
 4 {
 5     struct node *next;
 6     int data;
 7 }*ListNode;
 8  
 9 //尾插法建立鏈表(不帶頭結點)
10 ListNode creatrList()
11 {
12     ListNode p = (ListNode)malloc(sizeof(ListNode));
13     ListNode s,q;
14     p ->next = NULL;
15     q = p;
16     int x=0;
17     printf("建立鏈表,以-1結束:");
18     scanf_s("%d", &x);
19     while (x!=-1)
20     {
21         s = (ListNode)malloc(sizeof(ListNode));
22         s->next = NULL;
23         p->data = x;
24         p->next = s;
25         p = s;
26         scanf_s("%d", &x);
27     }
28     return q;
29 }
30 //反轉鏈表
31 ListNode ReverseList(ListNode pHead)
32 {
33     ListNode prev = NULL;
34     ListNode pNode = pHead;
35     ListNode ReverPHead=NULL;
36     while (pNode != NULL)
37     {
38         ListNode pNext = pNode->next;
39         if (pNext == NULL)
40             ReverPHead = pNode;
41         pNode->next = prev;
42         prev = pNode;
43         pNode = pNext;
44     }
45     printf("%d",ReverPHead->data);
46     return ReverPHead;
47 }
48  
49 int main()
50 {
51     ListNode h,RH;
52     h = creatrList();
53  
54     RH=ReverseList(h);
55     if (RH->next == NULL)
56         printf("鏈表爲空\n");
57     else
58     {
59         RH = RH->next;
60         while (RH != NULL)
61         {
62             printf("%3d", RH->data);
63             RH = RH->next;
64         }
65         printf("\n");
66     }
67     return 0;
68  
69 }
70 /*
71 建立鏈表,以-1結束:1 2 3 4 5 6 -1
72 6  5  4  3  2  1
73 請按任意鍵繼續. . .
74  
75 建立鏈表,以-1結束:-1
76 鏈表爲空
77 請按任意鍵繼續. . .
78  
79 建立鏈表,以-1結束:4 -1
80 4
81 請按任意鍵繼續. . .
82 */
View Code

46.輸出鏈表中倒數第k個結點,鏈表從1開始計數吧,即鏈表的尾結點是倒數第1個結點。  

要求:只能遍歷一次鏈表找到k結點。

代碼:

 1 #include<stdio.h>
 2 #include"malloc.h"
 3 typedef struct node
 4 {
 5     int value;
 6     struct  node *next;
 7 }*ListNode;
 8  
 9 ListNode createList()
10 {
11     ListNode H = (ListNode)malloc(sizeof(ListNode));
12     H->next = NULL;
13     ListNode r, s;
14     r = H;
15     int x;
16     printf("建立鏈表,輸入整數,以-1結束:");
17     scanf_s("%d",&x);
18     while (x != -1)
19     {
20         s = (ListNode)malloc(sizeof(ListNode));
21         s->value = x;
22         s->next = r->next;
23         r->next = s;
24         r = s;
25         scanf_s("%d", &x);
26     }
27     return H;
28 }
29  
30 ListNode FindKToTail(ListNode H, unsigned int k)
31 {
32     //若是鏈表爲空或k等於0,返回NULL
33     if (H->next == NULL || k == 0)
34         return NULL;
35     ListNode  pBegin=H->next;
36     ListNode  pEnd=NULL;
37     for (unsigned int i = 0; i < k - 1;i++)
38     {
39         if (pBegin->next != NULL)
40             pBegin = pBegin->next;
41         else
42         {
43             return NULL;   //若是鏈表的長度小於K,返回NULL
44         }
45     }
46     pEnd = H->next;
47     while (pBegin->next !=NULL)
48     {
49         pBegin = pBegin->next;
50         pEnd = pEnd->next;
51     }
52     return pEnd;
53 }
54 int main()
55 {
56     ListNode H,p,q;
57     unsigned int k = 0;
58     H = createList();
59     p = H->next;
60     printf("建立的鏈表爲:");
61     while (p!=NULL)
62     {
63         printf("%3d",p->value);
64         p = p->next;
65     }
66     printf("\n");
67     printf("鏈表建立完成,輸入要查找的倒數位置:");
68     scanf_s("%d", &k);
69     q = FindKToTail(H,k);
70     if (q == NULL)
71         printf("鏈表爲空或k大於鏈表的長度\n");
72     else
73         printf("倒數第 %d 個位置的值爲 %d\n",k,q->value);
74  
75     return 0;
76 }
77  
78 /*
79 建立鏈表,輸入整數,以-1結束:1 2 3 4 5 6 7 8 9 10 -1
80 建立的鏈表爲:  1  2  3  4  5  6  7  8  9 10
81 鏈表建立完成,輸入要查找的倒數位置:5
82 倒數第 5 個位置的值爲 6
83 請按任意鍵繼續. . .
84  
85 建立鏈表,輸入整數,以-1結束:-1
86 建立的鏈表爲:
87 鏈表建立完成,輸入要查找的倒數位置:0
88 鏈表爲空或k大於鏈表的長度
89 請按任意鍵繼續. . .
90  
91 建立鏈表,輸入整數,以-1結束:1 2 3 -1
92 建立的鏈表爲:  1  2  3
93 鏈表建立完成,輸入要查找的倒數位置:5
94 鏈表爲空或k大於鏈表的長度
95 請按任意鍵繼續. . .
96  
97  
98 */
View Code

47.調整數組

  輸入一個整數數組,實現一個函數來調整該數組中的數字,使得全部奇數位於數組的前半部分,全部的偶數位於  數組的後半部分。

代碼

 1 #include<stdio.h>
 2 bool isEven(int n)
 3 {
 4     return (n & 1) == 0;
 5 }
 6 void Reorder(int *pData, unsigned int length, bool(*func)(int))
 7 {
 8     if (pData == NULL || length == 0)
 9         return;
10     int *pBegin = pData;
11     int *pEnd = pData + length - 1;
12     while (pBegin < pEnd)
13     {
14         while (pBegin < pEnd && !func(*pBegin)) //若是前面的指針指向的數字是奇數
15             pBegin++;
16         while (pBegin < pEnd && func(*pEnd))    //若是後面的指針指向的數字是偶數
17             pEnd--;
18         if (pBegin < pEnd)
19         {
20             int temp = *pBegin;
21             *pBegin = *pEnd;
22             *pEnd = temp;
23         }
24     }
25      
26 }
27 int main()
28 {
29     int a[8] = { 5, 1, 6, 2, 3, 7, 8, 10 };
30     Reorder(a,8,isEven);
31     for (int i = 0; i < 8; i++)
32         printf("%3d",a[i]);
33     printf("\n");
34     return 0;
35 }
36 /*
37 5  1  7  3  2  6  8 10
38 請按任意鍵繼續. . .
39  
40 */
View Code

48.刪除鏈表指定節點

  在給定單鏈表的頭結點指針和一個結點指針,定義一個函數在O(1)時間刪除該結點。

代碼:

  1 #include <stdio.h>
  2 #include "malloc.h"
  3 struct ListNode
  4 {
  5     int  value;
  6     ListNode *next;
  7 };
  8 //尾插法建立鏈表
  9 ListNode *createList()
 10 {
 11     ListNode *H = (ListNode *)malloc(sizeof(ListNode));
 12     H->next = NULL;
 13     ListNode *s, *r = H; //r指向尾節點,s爲要插入的結點
 14     int x;
 15     scanf_s("%d",&x);
 16     while (x!=-1)
 17     {
 18         s = (ListNode *)malloc(sizeof(ListNode));
 19         s->value = x;
 20         s->next = r->next;
 21         r->next = s;
 22         r = s;
 23         scanf_s("%d", &x);
 24     }
 25     return H;
 26 }
 27 void DeleteNode(ListNode **pListHead,ListNode *pToDelete)
 28 {
 29     if (pListHead == NULL || *pListHead == NULL || pToDelete == NULL)
 30         return;
 31     //要刪除的結點不是尾結點,將須要刪除的結點後面的結點覆蓋到要刪除的結點,將後面的結點刪除
 32     if (pToDelete->next != NULL)
 33     {
 34         ListNode *pNode = pToDelete->next;
 35         pToDelete->value = pNode->value;
 36         pToDelete->next = pNode->next;
 37         delete pNode;
 38         pNode = NULL;
 39     }
 40     //鏈表中只有一個結點,刪除頭結點(也是尾結點)
 41     else if (*pListHead == pToDelete)
 42     {
 43         delete pToDelete;
 44         pToDelete = NULL;
 45         pListHead = NULL;
 46     }
 47     //鏈表中有多個結點,要刪除的結點在尾部,須要找到刪除結點的前一個結點(常規方法)
 48     else
 49     {
 50         ListNode *pNodes = *pListHead;
 51         while (pNodes->next != pToDelete)
 52         {
 53             pNodes = pNodes->next;
 54         }
 55         pNodes->next = NULL;
 56         delete pToDelete;
 57         pToDelete = NULL;
 58     }
 59 }
 60 ListNode *find(ListNode *list, int x)
 61 {
 62     ListNode *fq;
 63     fq = list->next;
 64     if (fq == NULL)
 65         return NULL;
 66     while (fq != NULL)
 67     {
 68         if (fq->value == x)
 69             return fq;
 70         fq = fq->next;
 71     }
 72     return NULL;
 73 }
 74  
 75 int main()
 76 {
 77     int x;
 78     ListNode *p,*q;
 79     ListNode *H = (ListNode *)malloc(sizeof(ListNode));
 80     printf("輸入單鏈表的結點值,以-1結束:");
 81     H = createList();
 82     printf("輸入要刪除的結點的值:");
 83     scanf_s("%d",&x);
 84     q = find(H,x);
 85     DeleteNode(&H,q);
 86     p = H->next;
 87     printf("刪除一個結點%d後的值爲 :",x);
 88     while (p != NULL)
 89     {
 90         printf("%3d",p->value);
 91         p = p->next;
 92     }
 93     printf("\n");
 94  
 95     return 0;
 96 }
 97  
 98 /*
 99 輸入單鏈表的結點值,以-1結束:1 2 3 4 5 6 -1
100 輸入要刪除的結點的值:1
101 刪除一個結點1後的值爲 :  2  3  4  5  6
102 請按任意鍵繼續. . .
103  
104 輸入單鏈表的結點值,以-1結束:1 2 3 4 5 6 -1
105 輸入要刪除的結點的值:3
106 刪除一個結點3後的值爲 :  1  2  4  5  6
107 請按任意鍵繼續. . .
108  
109 輸入單鏈表的結點值,以-1結束:1 2 3 4 5 6 -1
110 輸入要刪除的結點的值:6
111 刪除一個結點6後的值爲 :  1  2  3  4  5
112 請按任意鍵繼續. . .
113 */
View Code

49. 不使用庫函數求次方

  實現函數double Power(double base,int exponent),求base的exponent次方,不得使用庫函數,同時不須要考慮大數問題。

首先,對於此題目,能夠考慮如下幾種狀況:

        1.當次數爲負數且底數爲0的時候,是沒有意義的;

        2.當底數爲0,次數也爲0的時候,也是沒有意義的,能夠輸出1或0;

        3.其餘狀況

代碼:

 1 #include <stdio.h>
 2 bool g_InvalidInput = false;  //當出錯時,這個變量爲true,不然爲false,這樣能夠把返回值直接傳給其餘變量
 3 //比較兩個數是否相等
 4 bool equal(double num1,double num2)
 5 {
 6     if ((num1 - num2 > -0.0000001) && (num1 - num2 < 0.0000001))
 7         return true;
 8     else
 9         return false;
10 }
11  
12 double PowerWithUnsignedExponent(double base,unsigned int exponent)
13 {
14     double result = 1.0;
15     for (int i = 1; i <= exponent; i++)
16         result *= base;
17     return result;
18 }
19 double power(double base, int exponent)
20 {
21     g_InvalidInput = false;
22     if (equal(base, 0.0) && exponent < 0){
23         g_InvalidInput = true;  //出錯時,g_InvalidInput = false;
24         return 0.0;
25     }
26     unsigned int absExponent = (unsigned int )(exponent);
27     if (exponent < 0)
28         absExponent = (unsigned int)(-exponent);
29     double result = PowerWithUnsignedExponent(base,absExponent);
30     if (exponent < 0)
31         result = 1.0 / result;  //指數爲負數,對結果求倒數
32     return result;
33 }
34 int main()
35 {
36     double base, exponent;
37     scanf_s("%lf", &base);
38     scanf_s("%lf", &exponent);
39     printf("%lf\n", power(base, exponent));
40     return 0;
41 }
42 /*
43 2.0 3.0
44 8.000000
45 請按任意鍵繼續. . .
46  
47 2.0 -3.0
48 0.125000
49 請按任意鍵繼續. . .
50  
51 0 0
52 1.000000
53 請按任意鍵繼續. . .
54  
55 */
View Code

PowerWithUnsignedExponent方法改進:

即利用公式

            a^n =  a^(n/2) * a^(n/2)                          n爲偶數

            a^n = a^((n-1)/2) * a^((n-1)/2) * a            n爲奇數

代碼:

 1 double PowerWithUnsignedExponent(double base, unsigned int exponent)
 2 {
 3     if (exponent == 0)
 4         return 1;
 5     if (exponent == 1)
 6         return base;
 7     double result = PowerWithUnsignedExponent1(base, exponent >> 1);
 8     result *= result;
 9     if (exponent & 0x1 == 1)
10         result *= base;
11     return result;
12 }
View Code

50.輸出指定數字中的二進制表示形式中1的個數

  實現一個函數,輸入一個整數,輸出該數的二進制表示形式中1的個數,;例如把9表示成二進制是1001,有2位是1,所以若是輸入9,改函數輸出2.

代碼:

 1 #include<stdio.h>
 2 //二進制中1的個數解法一:爲了不死循環,首先把n和1作與運算,判斷n最低位是否是1,接着把1
 3 //左移一位獲得2,再和n作與運算,整數中有多少位,就須要循環多少次
 4 //
 5 int NumberOf1(int n)
 6 {
 7     int count = 0;
 8     unsigned int flag = 1;
 9     while (flag)
10     {
11         if (n & flag)
12             count++;
13         flag = flag << 1;
14     }
15     return count;
16      
17 }
18 //解法二:把一個整數減去1再和原來的整數作與運算,就會把該整數的二進制表示形式中最右邊的1變成0,那麼,一個整數中有多少個1就須要循環多少次
19 int NumberOf2(int n)
20 {
21     int count = 0;
22     while (n)
23     {
24         ++count;
25         n = (n - 1)& n;
26     }
27     return count;
28 }
29 int main()
30 {
31     int n;
32     scanf_s("%d", &n);
33     printf("解法一:該整數表示成二進制的形式中1 的個數爲:%d\n", NumberOf1(n));
34     printf("解法二:該整數表示成二進制的形式中1 的個數爲:%d\n", NumberOf2(n));
35     return 0;
36 }
37 /*
38 7
39 解法一:該整數表示成二進制的形式中1 的個數爲:3
40 解法二:該整數表示成二進制的形式中1 的個數爲:3
41 請按任意鍵繼續. . .
42  
43 */
View Code

51.把一個數組最開始的若干各元素搬到數組的末尾

       把一個數組最開始的若干各元素搬到數組的末尾,稱之爲旋轉數組,輸入一個遞增排序的數組的一個旋轉,輸出旋轉數組的最小元素。例如數組{3,4,5,1,2}是數組{1,2,3,4,5}的一個旋轉,該數組的最小值爲1;

 1 #include<stdio.h>
 2 int MinInOrder(int r[], int p1, int p2)
 3 {
 4     int result = r[p1];
 5     for (int i = p1 + 1; i <= p2; i++)
 6     {
 7         if (r[i] < result)
 8             result = r[i];
 9     }
10     return result;
11 }
12 int Min(int r[], int length)
13 {
14     if (r == NULL || length <= 0)
15         return 0;
16     int p1 = 0;
17     int p2 = length - 1;
18     int mid = p1;
19     while (r[p1] >= r[p2])
20     {
21         if (p2 - p1 == 1)
22         {
23             mid = p2;
24             break;
25         }
26         mid = (p1 + p2) / 2;
27         if (r[p1] == r[p2] && r[mid] == r[p2])
28             return MinInOrder(r, p1, p2);
29         if (r[mid] >= r[p1])
30             p1 = mid;
31         else if (r[mid] <= r[p2])
32             p2 = mid;
33     }
34     return r[mid];
35 }
36  
37 int main()
38 {
39     int a[8] = { 1, 1, 1, 0, 1 };
40     printf("%d\n", Min(a, 5));
41     return 0;
42 }
View Code

52.分割數字

      給定一個整數n和一個整數m,將n按照位分割成多個數字,使得這多個數字的和最接近m,

      例如n=654321,m=50,則最大值爲48(6+5+4+32+1)。

     分析:

    (1)對於一個Integer類型的數字n和m,首先有種特殊狀況;   即 n<m :直接返回n;

    (2)將整數n按位存入一個整型數組中,所求的最大值的位數確定小於等於m的位數,

     則以2爲大小做爲窗口在n所在的數組上進行滑動,每滑動一次,將窗口中的數字表示成十進制並和窗口爲的其餘數字進行相加,判斷是否大於設定的一個numMax,

     而且這個數字小於m,則將這個數字賦給numMax。

    (3)依次增長窗口的大小直到小於等於m的位數爲止。

java代碼:

 1 package cvte;
 2 
 3 import java.util.Scanner;
 4 
 5 /*
 6  * 題目:給定一個整數n和一個整數m,將n按照位分割成多個數字,使得這多個數字的和最接近m,
 7  *     例如n=654321,m=50,則最大值爲48(6+5+4+32+1)
 8  * */
 9 public class Main {
10     // 求最大值
11     public static Integer plimit(Integer n, Integer m) {
12         if (n < m)
13             return n;
14         Integer add = 0; //把全部的位加起來的和
15         Integer maxNum = 0;   //最終所求結果
16         Integer count = 0;    //輔助計數器,計算每一個子數組中按位加起來的的和
17         Integer madd = 0;    //輔助計數,把每一個子數組中的數字表示成十進制
18         Integer mc = 0;      //輔助計數,把每一個子數組中的數字表示成十進和其餘位按位加起來的總和
19         int a = 0, b = 0;    //標記子數組第一位和最後一位的指針
20         String nstr = n.toString();    //將n轉化成字符串
21         String mstr = m.toString();   //將m轉化字符串
22         int nlength = nstr.length(); // n的長度
23         int mlength = mstr.length(); // m的長度
24         int[] narr = new int[nlength]; // 新建一個數組用來保存num每一位的數字
25         for (int i = 0; i < nlength; i++) {
26             Character ch = nstr.charAt(i); // 遍歷nstr將每一位數字添加到narr
27             narr[i] = Integer.parseInt(ch.toString());
28         }
29         for (int i = 0; i < nlength; i++) {
30             add += narr[i];
31         }
32         if (add < m){
33             for (int i = 2; i <= mlength; i++) {
34                 a = 0;
35                 b = i - 1;
36                 while (b < nlength) {
37                     for (int j = a; j <=b; j++) {
38                         //System.out.println("j="+j);
39                         count += narr[j];
40                         madd = madd + (int) (narr[j] * Math.pow(10, (b - j)));
41                         a++;
42                     }
43                     mc = (add - count) + madd;
44                     //System.out.println("mc="+mc);
45                     if (mc > maxNum && mc < m) {
46                         maxNum = mc;
47                     }
48                     b++;
49                     a = b - i + 1;
50                     madd=0;
51                     count=0;
52                     //System.out.println("a=  b="+a+" "+b);
53                 }
54 
55             }
56         }
57         return maxNum;
58     }
59 
60     public static void main(String[] args) {
61         Scanner in = new Scanner(System.in);
62         Integer n = in.nextInt();
63         Integer m = in.nextInt();
64         System.out.println(plimit(n, m));
65     }
66 
67 }
68 /*
69 例一:
70      輸入:
71   50
72      輸出:
73   例二:
74      輸入:
75   661
76      輸出:
77  */
View Code

53.矩陣壓縮處理

1.特殊矩陣

(1)上三角形

       上三角形的矩陣的有效元素只有n(n+1)/2,上三角形中元素A[i][j]在一維數組中存儲地址爲:

按行存儲:LOC(A[i][j])=LOC(A[1][1])+(i-1)(2n-i+2)/2+j-i;

(2)下三角形

       上三角形的矩陣的有效元素只有n(n+1)/2,上三角形中元素A[i][j]在一維數組中存儲地址爲:

按行存儲:LOC(A[i][j])=LOC(A[1][1])+i(i-1)/2+j-1;

(3)三對角矩陣

       按行存儲:LOC(A[i][j])=LOC(A[1][1])+2(i-1)+j-1;

54.斐波那契數列

(1).含義:斐波那契數列是根據兔子的繁殖獲得的一組數列:1, 1, 2, 3, 5, 8, 13, 21, 34, 55,89, 144, 233....其特色是從第三項開始每一項都等於前兩項之和。

(2).解法

  對於這個數列,第一種解法就是用公式 f(n) = f(n-1)+f(n-2)  遞歸調用,但這種方法有大量的計算是重複的,時間複雜度以n的指數增長,具體代碼以下:

1 long f1(int n)
2 {
3     if(n<=0)
4       return  0;
5     if (n ==1)
6       return 1;
7     return f1(n-1) + f1(n-2);
8 }

  第二種解法也比較好理解,若是先求f(1),f(2),再根據f(1)和f(2)就出f(3),以此論推求出f(n),這種計算方法的時間複雜度是O(n)。這種方法是給數列前面加一個0,也就是說序列是從0開始,具體代碼以下:

 1 long f1(int n)
 2 {
 3     long x = 0, y = 1;
 4     for (int i = 1; i < n; i++)
 5     {
 6         y = x + y; //當前得值等於前兩項之和
 7         x = y - x; //當前項的前一項等於當前項減去當前項的前一項的前一項
 8     }
 9     return y;
10 }

         歡迎掃碼關注個人微信公衆號,或者微信公衆號直接搜索Java傳奇,不定時更新一些學習筆記!

                                        

相關文章
相關標籤/搜索