课程作业01

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

设计思想:借助n!来计算n! k! (n-k)!进而求出C(n,k)

程序流程图:

源程序代码:

package zuheshu;
import java.util.Scanner;
public class zuheshu {
	public static void diyige() {
		zuheshu j=new zuheshu();
		int b;
		long d;
		Scanner in=new Scanner(System.in);
		System.out.print("请输入N的值:");
		int n=in.nextInt();
		System.out.print("请输入K的值(K<N):");
		int k=in.nextInt();
		b=n-k;
		long i=j.f(n);
		long a=j.f(k);
		long c=j.f(b);
		d=i/a/c;
		System.out.print("C("+n+","+k+")"+"="+d);
			}
	public long f(int n) {
				if(n==1) 
				{
					return 1;
				}
				return n*f(n-1);
	}
	
	public static void main(String[] args) {
		// TODO Auto-generated method stub
         diyige();


	}
}

结果截图:

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

设计思想:利用杨辉三角的坐标得出C(n,k)的值

程序流程图:

程序源代码:

import java.util.Scanner;
public class dierge {
	public static int yanghui(int n,int m) {
	    int[][]  arr= new int[n+1][n+1];
	    for(int i=0;i<n+1;i++)
	    {
	    	for(int j=i+1;j<n+1;j++)
	    	{
	    		arr[i][j]=0;
	    	}
	    	for(int j=0;j<i;j++)
	    	{
	    		if(j==0)
	    		{
	    			arr[i][j]=1;
	    		}
	    		else
	    		{
	    			arr[i][j]=arr[i-1][j-1]+arr[i-1][j];
	    		}
	    	}
	    }
	    return arr[n][m];
	}
	public static void main(String[] args) {
		// TODO Auto-generated method stub
		Scanner in=new Scanner(System.in);
		System.out.printf("请输入N的值:");
		int n=in.nextInt();
		System.out.printf("请输入K的值:");
		int k=in.nextInt();
		System.out.println(yanghui(n+1,k));
	}

}

  结果截图:

1.3使用递归的方法用组合数递推公式计算

设计思想:利用对组合数公式进行递归来求出最后的值

程序流程图:

程序源代码:

import java.util.Scanner;
public class disange {
public static int jiecheng(int m,int n) 
{
	if(m<0||n<0||m<n)
		return 0;
	if(m==n)
		return 1;
	if(n==1)
		return m;
	return jiecheng(m-1,n)+jiecheng(m-1,n-1);
}
	public static void main(String[] args) {
		// TODO Auto-generated method stub
System.out.printf("输入N的值:");
Scanner in1=new Scanner(System.in);
Scanner in2=new Scanner(System.in);
int m=in1.nextInt();
System.out.printf("输入k的值:");
int n=in2.nextInt();
in1.close();
in2.close();
System.out.println("C("+m+","+n+")="+jiecheng(m,n));
	}

}

  结果截图:

2递归编程解决汉诺塔问题。

设计思想:利用中间塔与目标塔的轮换交替来使盘子移动到目标塔 对以上步骤进行递归解决这个问题

程序流程图:

程序源代码:

package hannuota;
import java.util.Scanner;
public class hannuota {
	int i=1;
	public static void move(int n,char qishi,char mubiao) 
	{
		
		
		System.out.println("将"+qishi+"号盘子"+"---->"+mubiao+"号盘子");  
	}  
	public static void hanoi(int n,char qishi,char jieyong,char mubiao)
	{  
		 
	    if (n==1)  
	    move(1,qishi,mubiao);
	    else  
	    {  
	      hanoi(n-1,qishi,mubiao,jieyong);
	      move(n,qishi,mubiao);              
	      hanoi(n-1,jieyong,qishi,mubiao);
	    }  
	}  
	public static void main(String[] args) {
		// TODO Auto-generated method stub

		System.out.printf("请输入盘子的个数");   
	     Scanner in=new Scanner(System.in);
	     int n=in.nextInt(); 
	     char x='A',y='B',z='C';  
	     System.out.println("盘子移动情况如下:");  
	     hanoi(n,x,y,z);  
	}

}

  结果截图:

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

设计思想:对输入的字符串进行前后元素的对比 若相同则ture不然为false

程序流程图:

程序源代码;

package huiwen;
import java.util.Scanner;
public class huiwen {
public static boolean isHuiWen(String text) 
{
	int length = text.length();
    for (int i = 0; i < length / 2; i++) 
 {
    if (text.toCharArray()[i] != text.toCharArray()[length - i - 1]) 
 {
		    return false;
	}
 }
		    return true;
	}
public static void main(String[] args) {
	// TODO Auto-generated method stub
	Scanner in=new Scanner(System.in);
	String text = in.next();
	System.out.println(isHuiWen(text));	
	}

}

结果截图:

posted @ 2017-10-13 14:16  上官逸辉  阅读(221)  评论(0编辑  收藏  举报