JAVA课后作业

课后作业01

设计思想:1.使用组合数公式计算,先输入两个整数nk,求出n的阶乘,k的阶乘,n-k的阶乘,然后利用公式求出结果。

程序流程图:

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

源程序代码:package zuheshu;

import java.util.Scanner;

 

public class zuheshu

{

public int jiecheng(int n)

{

Scanner s=new Scanner(System.in);

n=s.nextInt();

int sum=1;

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

{

sum=sum*i;

}

return sum;

}

public int Zuhe(int k,int n)

{

int result;

int N;

int K;

int C=n-k;

N=jiecheng(n);

K=jiecheng(k);

C=jiecheng(C);

result=N/(K*C);

return result;

}

  public void main(String[] args)

  {

  

  int k,n;

  Scanner input=new Scanner(System.in);

  System.out.println("请输入k,n的值:");

  k=input.nextInt();

  n=input.nextInt();

  Zuhe(k,n);

}

}

结果截图:

 

 

2.设计思想:利用杨辉三角形的规律,第i行第j个数值为该位置的数的上一行左右两个数之和,求出组合数等于第k+1行,第n+1列的数字。

源程序代码:import java.util.Scanner;

 

public class zuheshu {

public static void main(String args[])

{

Scanner sc=new Scanner(System.in);

System.out.print("输入n的值:");

int n=sc.nextInt();

System.out.print("输入k的值:");

int k=sc.nextInt();

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

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

{

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

{

if(j==0||j==i)

{

a[i][j]=1;

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

}

else

{

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

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

System.out.print("");

}

}

System.out.println();

}

if(n<2||k==1)

{

System.out.println("num=1");

}

else

{

System.out.println("num="+a[n][k-1]+"="+a[n-1][k-2]+"+"+a[n-1][k-1]);

}

}

}

程序流程图:

 

 

 

 

 

 

 

 

 

 

 

 

 

结果截图:

 

3.设计思想:组合数中,若n=1,则输出结果1,如果不为1,利用递归和公式计算第n-1直至1,最后输出结果。

 源程序代码:import java.util.Scanner;

 

public class Digui {

public static int zuhe(int n,int k)

{

if(n<0||k<0||n<k)

{

return 0;

}

if(n==k)

{

return 1;

}

if(k==1)

{

return n;

}

return zuhe(n-1,k)+zuhe(n-1,k-1);

}

  public static void main(String atgs[])

  {

    Scanner sc=new Scanner(System.in);

System.out.print("输入n的值:");

int n=sc.nextInt();

System.out.print("输入k的值:");

int k=sc.nextInt();

System.out.print("result:"+zuhe(n,k));

  }

  

}

结果截图:

 

课后作业02

设计思想:该程序需要用递归的算法实现。当A上只有一个盘子时,直接将盘子从A移动到C上,当A上有n个盘子时,需要移动的次数等于2n次方减去1需要先将前n-1个盘子借助C移动到B上,然后将A上的第n个盘子移动到C上,最后将B上的n-1个借助A移动到C上。从第n个到第一个依次递归。

程序流程图:

 

 

 

Y

 

N

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

源程序代码:import java.util.Scanner;

 

public class Hanoi {

 

public void hanoi(int n,char A,char B,char C) {

 

if (n == 1){

 

move(A,C);      //如果n1,直接从A移动到C

 

} else {

 

hanoi(n - 1,A,C,B);      //将前n-1个盘子移动到B

 

move(A,C);

 

hanoi(n - 1,B,A,C);       //B上的n-1个盘子移动到C

 

}

 

}

 

 

private void move(char A,char C) {

 

System.out.println("移动方向:由" + A + "移动到" + C);        //盘子的移动

 

}

 

public static void main(String[] args) {

System.out.println("请输入盘子数:");

Scanner in=new Scanner(System.in);

int n=in.nextInt();

Hanoi hanoi = new Hanoi();

hanoi.hanoi(n,'A','B','C');

 

}

 

 

}

结果截图:

 

课后作业03

设计思想:利用递归解决问题。输入字符串后,首先判断字符串的长度,如果是01,则肯定是回文字符串,否则,判断字符串的第一个字符和最后一个字符是否相同,相同则将第一个和最后一个字符删去,再次判断直至字符串为空,都相同则为回文字符串,否则不是。

程序流程图:

 

 

 

 

 

 

 

 

 

Y

 

 

N

 

 

 

 

Y

 

 

 

 

 

 

 

 

 

 

 

 

源程序代码:import java.util.Arrays;

import java.util.Scanner;

public class RecursionTest {

public boolean palindromeJudge(String str){

 

if(str.length()==1||str.length()==0){

     return true;

}else if(str.charAt(0)==str.charAt(str.length()-1)){

   

String strShort=stringCut(str);

    return palindromeJudge(strShort);

}else{

    return false;

}

}

 

public static String stringCut(String str){

   

 if(str==null||"".equals(str)){

         

return "";

     }

       char[] src=str.toCharArray();

     

char[] dst=Arrays.copyOfRange(src, 1,src.length-1);

      return String.valueOf(dst);

}

 

public static void main(String[] args) {

        RecursionTest test=new RecursionTest();

        System.out.println("请输入一个字符串:");

     Scanner sc=new Scanner(System.in);

     String str=sc.nextLine();

System.out.println(test.palindromeJudge(str));

       }

}

程序截图:

 

posted @ 2017-10-14 00:47  limengke**  阅读(249)  评论(0编辑  收藏  举报