课程作业 02 2017.10.13

课后作业1

使用计算机计算组合数:

1)使用组合数公式利用n!来计算

 

设计思想:通过for循环分别求得组合数中的的分子分母各项求出,再求组合数

程序流程图:

源程序代码:

//20163591 陈天时 信1605-3

import java.util.Scanner;

public class zuheshu

{

    @SuppressWarnings("unused")

    public static void main(String[] args)

    {

       Scanner input=new Scanner(System.in);

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

       int n=input.nextInt();

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

       int k=input.nextInt();

       int a=1,b=1,c=1,C;

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

       {

           a=a*i;

       }

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

       {

           b=b*i;

       }

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

       {

           c=c*i;

       }

       C=a/(b*c);

       System.out.println("C="+C);

    }

}

结果截图:

 

2)使用递推的方法用杨辉三角形计算

1设计思想:通过构建杨辉三角来寻找组合数,

2程序流程图

 

3源程序代码:

//20163591 陈天时 信1605-3

import java.util.Scanner;

public class yanghuisanjiao

{

    public static void main(String[] args)

    {

       @SuppressWarnings("resource")

       Scanner input=new Scanner(System.in);

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

       int n=input.nextInt();

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

       int k=input.nextInt();

       int [][] yhsj=new int [30][30];

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

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

           {

              yhsj[i][0]=1;

              if(j>0&&j<i)

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

              else if(i==j)

                  yhsj[i][j]=1;

           }

       System.out.print("C="+yhsj[n][k]);

    }

}

 

4结果截图

(3)使用递归的方法用组合数递推公式计算

1设计思想:用递归函数,递归求解组合数

2程序流程图:

3源程序代码:

//20163591 陈天时 信1605-3

import java.util.Scanner;

public class digui

{

    static int fangfa(int n, int k)

    {

       if(k==n||k==0)

           return 1;

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

           return 0;

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

    }

    public static void main(String[] args)

    {

       @SuppressWarnings("unused")

       Scanner input=new Scanner(System.in);

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

       int n=input.nextInt();

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

       int k=input.nextInt();

       System.out.println("C="+fangfa(n,k));

    }

}

4结果截图:

课后作业2

递归编程解决汉诺塔问题

源程序代码:

//20163591 陈天时 信1605-3

import java.util.Scanner;

public class hannuota

{

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

    {

       if(n==1)

       {

           System.out.println("1号盘子从"+a+"移动到"+b);

           return;

       }

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

       System.out.println(+n+"号盘子从"+a+"移动到"+c);

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

    }

    public static void main(String[] args)

    {

       @SuppressWarnings({ "unused", "resource" })

       Scanner input=new Scanner(System.in);

       hnt(4,'A','B','C');

    }

}

课后作业3

使用递归方式判断某个字串是否是回文( palindrome

1设计思想:通过eclipse中自带的类来将字符串倒过来,再构建一个新的字符串将字符串填入,再和原来的一一进行比较。

2程序流程图

3源程序代码:

//20163591 陈天时 信1605-3

import java.util.Scanner;

public class palindrome

{

    public static void main(String[] args)

    {

       Scanner input=new Scanner(System.in);

       String str="";

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

       Scanner in=new Scanner(System.in);

       str=in.nextLine();

       StringBuffer dao=new StringBuffer(str);

       dao.reverse();

       int n=0;

       for(int i=0;i<str.length();i++)

       {

           if(str.charAt(i)==dao.charAt(i))

              n++;

       }

       if(n==str.length())

           System.out.println(str+"是回文字符串");

       else

           System.out.println(str+"不是回文字符串");

    }

}

4结果截图

 

posted @ 2017-10-13 09:24  cts1234  阅读(117)  评论(0编辑  收藏  举报