10.14作業
- 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)驗證截圖:
- 2.漢諾塔問題
(1) 設計思想:
首先有三根柱子,可以認定為abc,要求是盤子必須是由上到下,由小到大串起來,並且每次移動只能移動一個盤子,而且是小盤子。要移動最下面的大盤子,就要先把上面的所有盤子移動;我們可以認為
(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使用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循環,用I從1開始記錄;設置一個變量,保存上一次相乘得到的結果,然後再用這個變量乘以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作業