1. 程式人生 > >課後作業02

課後作業02

一個數 判斷 under tour ret center ring arr 輸出結果

Java實現漢諾塔:

程序設計思想:

1.首先輸入盤子的數量n,如果盤子的數量是1,則直接將編號為1的圓盤從A移到C,遞歸結束。

2.否則:

遞歸,將A上編號為1n-1的圓盤移到B,C做輔助塔;

直接將編號為n的圓盤從AC;

遞歸,將B上的編號為1n-1的圓盤移到C,A做輔助塔。

程序流程圖:

技術分享

程序源代碼:

package tourial2;

import java.util.Scanner;

public class Hanio {

public static int m=0;

public static void move (String A,int n,String C)

{

System.out.println(++m+": "+n+","+A+"->"+C);

}

public static void Hanio (int n,String A,String B,String C)

{

if(n==1)

move(A,1,C);

else

{

Hanio(n-1,A,C,B);

move(A,n,C);

Hanio(n-1,B,A,C);

}

}

public static void main(String[] args) {

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

String A ,B ,C ;

Scanner input=new Scanner(System.in

);

System.out.println("請輸入三個盤子的名稱:");

A=input.next();

B=input.next();

C=input.next();

System.out.println("請輸入盤子的個數:");

int n=input.nextInt();

Hanio(n,A,B,C);

}

}

程序截圖:

技術分享

問題二:隨意輸入一個任意大小的字符串,判斷他是不是回文字符串。

程序設計思想:

從鍵盤隨意輸入一個字符串,並將其賦值給一個數組,然後用遞歸進行,若i=j,澤肯定是遞歸,否則從數組的首元素與尾元素進行比較,若相等,則進行i++j--,不斷向中間靠攏,直到達到判斷條件

i>=j(i=j是輸入的字符串的長度為偶數個,i>j是輸入的字符串有奇數個),中間若有一次不符合判斷,直接跳出遞歸,結束進程,輸出不是回文字符串。(i是指的字符串的第一個元素的下標,j是指的字符串的最後一個元素的下標)

程序設計流程圖:

技術分享

程序源代碼:

package tourial2;

import java.util.Scanner;

public class huiwenshu {

public static void huiwen(char a[],int j,int i)

{

if(i>=j)

{

if(a[i]==a[j])

System.out.println("是回文");

System.exit(0);

}

if(a[i] == a[j])

huiwen(a,--j,++i);

else

{

System.out.println("他不是回文數!");

System.exit(0);

}

}

public static void main(String[] args)

{

String s;

int j;

int i=0;

Scanner input=new Scanner(System.in);

System.out.println("請輸入 一個字符串:");

s=input.next();

char a[];

a=s.toCharArray();

j=a.length-1;

for( int k=0;k<s.length();k++)

{

System.out.print (a[k]);

}

huiwen(a,j,i);

}

}

程序截圖:

技術分享

技術分享

根據楊輝三角遞推求組合數

程序設計思想:

根據楊輝三角的規律,得出楊輝三角的第n行的第m個的值等於該位置的元素的上一行的左右兩個輸的和,然後根據楊輝三角與組合數的關系即c(n,m)等於楊輝三角的第n+1的第m+1個元素的值,根據這個來寫出組合數的值。

程序流程圖:

技術分享

程序源代碼:

package tourial2;

import java.util.Scanner;

public class yanghuisanjiao

{

public static void yanghuisanjiao(int n,int m)

{

if(m==1)

{

System.out.println("輸出結果為:");

System.out.println(n);

}

else

{

n=n+1;

int a[][] = new int [n][n];

System.out.println(1);

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

a[i][0]=1;

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

{

System.out.print(1+" ");

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

{

a[i][j]=a[i-1][j]+a[i-1][j-1];

System.out.print(" "+a[i][j]);

}

System.out.println();

}

System.out.println();

System.out.println("輸出結果:");

System.out.println(a[n-1][m]);

}

}

public static void main(String[] args) {

int x,y;

Scanner input=new Scanner(System.in);

System.out.println("請輸入第一個數:");

x=input.nextInt();

System.out.println("請輸入第二個數:");

y=input.nextInt();

while(x>y)

{

System.out.println("請重新輸入:");

System.out.println("請輸入第一個數:");

x=input.nextInt();

System.out.println("請輸入第二個數:");

y=input.nextInt();

}

yanghuisanjiao(y,x);

}

}

程序截圖:

技術分享

利用階乘公式來計算組合式:

程序設計思想:

根據公式

來計算組合數的大小,從鍵盤輸入n,m的值,設計一個計算階乘的大小,如果輸入的數a10,則直接return 1,否則運用遞歸,計算a-1的階乘,直到a1時,遞歸結束。

程序流程圖:

技術分享

階乘的流程圖:

技術分享

程序的源代碼:

package tourial2;

import java.math.BigInteger;

import java.util.Scanner;

public class zuheshu {

public static BigInteger calculateN2(int n) {

if(n==1 || n==0){

return BigInteger.valueOf(1);

}

return BigInteger.valueOf(n).multiply(calculateN2((n-1)));

}

public static void main(String[] args) {

Scanner scanner=new Scanner(System.in);

System.out.print("請輸入N1");

int number1=scanner.nextInt();

BigInteger f1=calculateN2(number1);

//System.out.println(number1+"!="+calculateN2(number1));

System.out.print("請輸入N2");

int number2=scanner.nextInt();

BigInteger f2=calculateN2(number2);

BigInteger f3=calculateN2(number1-number2);

//System.out.println(number2+"!="+calculateN2(number2));

BigInteger f4=f2.multiply(f3);

BigInteger f5= f1.divide(f4);

System.out.println("組合輸的結果是:"+f5);

}

}

程序截圖:

技術分享

運用公式計算組合數:

程序設計思想:

輸入n,m,兩個數(來組成要求出的組合數)(n>m),如果m=1,則輸出結果n,如果m!=1,則進入遞歸,運用公式,直到進行到n-m=1的時候,結束遞歸,輸出結果。

程序流程圖:

技術分享

程序源代碼:

package tourial2;

import java.util.Scanner;

public class gongshi {

public static int yang(int n,int m)

{

int b;

if(m!=1)

{

while(n-m==1)

{

return n;

}

b=yang(n-1,m-1)+yang(n-1,m);

}

else

b=n;

return b;

}

public static void main(String[] args) {

int n,m;

Scanner input=new Scanner(System.in);

System.out.println("請輸入兩個數:");

n=input.nextInt();

m=input.nextInt();

System.out.println("輸出結果:"+yang(n,m));

}

}

程序截圖:

技術分享

課後作業02