1. 程式人生 > >10.14作業

10.14作業

lin 進行 tro 比較 ann 使用 urn 漢諾塔 計算

  1. 1.使用遞歸方式判斷某個字串是否是回文

(1)設計思想:回文就是正著讀和反著讀都是一樣的,要判斷一個字符串是否回文,先要把字符串分解成每個字符,如果只有一個字符,可以簡單的判定;當字符個數超過一個的時候,就要進行比較,第一個和最後一個比較,這裏定義一個整數,用來記錄,開頭的加一,末尾的減一,比較兩個字符串是否相同,這就是遞歸函數了;

(2)程序流程圖:技術分享

(3)程序源代碼:

import java.util.Scanner;

public class Huiwen

{

public static boolean haha(String str,int start,int end)

{

if(start==end)

{

return true;

}

else{

if(str.charAt(start)!=str.charAt(end))

{

return false;

}

if(str.charAt(start)==str.charAt(end))

{

return true;

}

return haha( str,start+1, end-1);

}

}

public static void main(String[] args)

{

// TODO

自動生成的方法存根

Scanner input= new Scanner(System.in);

String s;

s=input.next();

int start=0,end=s.length();

if( haha(s, 0, s.length()-1))

{

System.out.println("是");

}

else

System.out.println("不是");

}}

(4)驗證截圖:技術分享技術分享

  1. 2.漢諾塔問題

(1) 設計思想:

首先有三根柱子,可以認定為abc,要求是盤子必須是由上到下,由小到大串起來,並且每次移動只能移動一個盤子,而且是小盤子。要移動最下面的大盤子,就要先把上面的所有盤子移動;我們可以認為

a為原柱,b為過渡柱,c為目標柱;如果只有一個盤子,可以直接從原柱移動到目標柱;如果有兩個盤子,就要先移動小盤子,先將小盤子移動到b柱子,然後將大盤子移動到c柱子,然後將小盤子移動到c柱子,當有三個及以上的盤子的時候,可以由大到小定義為1234....因為最大的必須要在c的最下面,要把上面所有盤子先移到b,然後把最後一個盤子移動到c,然後把b柱子上的盤子再移動到c,此時原柱子就變為b,而a就變為過渡柱子,c就是目標柱子;這裏要設置兩個參數,一個函數用來移動當前最大的盤子,直接從ac,並且輸出從哪移動到哪兒;第二個函數要有四個參數,一個整型,用來傳遞盤子個數,三個char類型,用來傳遞柱子的名字;首先判斷是否為n,也就是盤子的數量,是否為一。

(2)程序流程圖:技術分享

(3)程序代碼:

import java.util.Scanner;

public class Hannuota {

public static void six(char q, char w)

{

System.out.println(q+"----->"+w);//????????????輸出傳遞的參數

}

public static void niu(int n,char a,char b,char c)

{

if(n==1)

{

six(a,c);

}

else

{

niu( n-1, a, c, b);

six(a,c);

niu( n-1, b, a, c);

}

}

public static void main(String[] args)

{

Scanner input = new Scanner(System.in);

int num;

System.out.println("請輸入要移動盤子的數量");

num=input.nextInt();

niu( num,‘A‘, ‘B‘,‘C‘);

}

}

(4)驗證截圖:技術分享技術分享

  1. 1使用n的階乘計算組合數

(1)設計思想:主要就是求n的階乘,然後再根據公式看看需要幾個變量,對變量進行賦值。

(2)程序代碼:

import java.util.Scanner;

public class Cnjisuan {

public static int fact (int n)

{

if (n==1)

{

return 1;

}

else

{

return n*fact(n-1);

}

}

public static void main(String[] args)

{

Scanner input=new Scanner(System.in);

int n,k,a,b,c,d;

System.out.println("請輸入n和k的值:");

n=input.nextInt();

k=input.nextInt();

a=fact(n);

b=fact(k);

c=fact(n-k);

d=a/(b*c);

System.out.println("最後的結果是:"+d);

}

}

(3)驗證截圖:技術分享技術分享

3.2.使用遞推的方法用楊輝三角計算:

(1)設計思想:也是求階乘,例如,求5的階乘,要先算1*2,然後把1*2的結果再乘以3;然後再把1*2*3的結果乘以4,每次×的數字都比上一次×的數字大一,這裏可以用一個for循環,用I1開始記錄;設置一個變量,保存上一次相乘得到的結果,然後再用這個變量乘以i,此時的i會比上一次的i大一。這個程序主要是利用遞推法求階乘,其余的算法和上面一個相同。

(2)程序代碼:

import java.util.Scanner;

public class Ditui {

public static int fact (int n)

{ int a,b,c=1;

for(int i=1;i<=n;i++)

{

b=i;

a=b;

c=c*b;

}

return c;

}

public static void main(String[] args)

{

// TODO 自動生成的方法存根

Scanner input= new Scanner(System.in);

int a,b;

System.out.println("你要求幾的階乘");

a= input.nextInt();

b=fact(a);

System.out.println(b);

}

(3)驗證截圖:技術分享

10.14作業