组合数

一.组合数公式n!计算

1).程序设计思想

结合组合数公式实现n!的算法然后进行结果输出就可以啦。

2.程序设计流程图

 

 

3.源程序代码

     import java.util.*;

 

public class Combinatorial {

public static void main(String[] args) {

 

Scanner in = new Scanner(System.in

 

);

System.out.print("输入组合数下标n:");

int n = in.nextInt();

System.out.print("输入组合数上标k:");

int k = in.nextInt();

int C = Jiecheng(n)/(Jiecheng(k)*Jiecheng(n - k));

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

}

public static int Jiecheng(int n)

{

int s = 0;

if(n < 0)

System.out.println("Error!");

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

s = 1;

else

s = n * Jiecheng(n -1);

return s;

}

}

(4).结果截图

 

 

 .   杨辉三角

    1.设计思想

         构建杨辉三角,组合数的结果就相当于杨辉三角中第n+1k列的数。   

(2).程序设计流程图

                       

    3. 程序代码

        

import java.util.Scanner;

 

public class Yanghui{

 

public static void main(String args[])

 

{

Scanner input=new Scanner(System.in);

int n,k,m;

System.out.println("输入组合数公式的n,k:");

 

n=input.nextInt();

m=n+1;

k=input.nextInt();

int [][]f=new int[27][27];

 

f[0][0] = 1;

 

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

{

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

{

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

}

 

}

 

System.out.println("结果为"+f[m+1][k+1]);

 

}

 

}

 

   4. 结果截图

                               

三.使用递归的方法用组合数递推公式计算。

      1.设计思想

         递归组合数,相当于杨辉三角     构建递归函数,n,k相应于杨辉三角的行列

(2)..程序设计流程图

            

(3).程序代码

         import java.util.Scanner;

 

 public class Digui {

 

public static void main(String args[])

 

{

Scanner input=new Scanner(System.in);

 

int n,k;

System.out.println("请输入组合数公式的n和k:");

n=input.nextInt();

k=input.nextInt();

System.out.println("组合结果为"+ZuHe(n,k));

}

public static long ZuHe(int a,int b)

{

if(b==0)return 1;

else {

if(a==1)return 1;

else {

if(a==b)return 1;

else 

{

return (ZuHe(a-1,b-1)+ZuHe(a-1,b));

       }

     }

   }

 }

}

(4).结果截图

                  

四.汉诺塔问题.

(1).设计思想

    从主线开始调用函数进行不停的压栈和出栈操作,函数的调用就是将函数的压栈,结束就是出栈。这样就保证啦方法的调用顺序。

(2).程序设计流程图

                  

(3)程序代码.

     package Hanoi;

import java.util.Scanner;

public class Hanoi

{

static int m =0;

public static void move(int disks,char N,char M)

{

System.out.println("第" + (++m) +" 次移动 : " +" 把 "+ disks+" 号圆盘从 " + N +" 移到 " + M);

}

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

{

if(n == 1)

Hanoi.move(1, A, C);

else

{

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

Hanoi.move(n, A, C);

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

}

}

public static void main(String[] args) {

Scanner imput = new Scanner(System.in);

char A = 'A';

char B = 'B';

char C = 'C';

System.out.print("请输入圆盘的个数:");

int disks = imput.nextInt();

Hanoi.hanoi(disks, A, B, C);

System.out.println(">>一共移动了" + m + "次");

imput.close();

}}

   

(4).结果截图

                     

五.回文数判断。

1.设计思想

    依次进行第一个和最后一个,第二个和倒数第二个的比较若相等则输出true否则输出flase

(2).程序设计流程图

            

     

(3).程序代码

      package Palindrome;

 

import java.io.BufferedReader;

import java.io.InputStreamReader;

public class Palindrome

{

public static void main(String[] args)throws Exception

{

String str ="";

BufferedReader br = new BufferedReader(

new InputStreamReader(System.in),256);

System.out.println("请输入一串字符,每个字或单词用空格隔开:");

str = br.readLine();

System.out.println("检查结果: " + huiwen(str,0,str.length()-1));

}

public static boolean huiwen(String s,int start,int end){

if(start == end) return true;

if(start > end){

System.out.println("输入有误!");

return false;

}

if(s.charAt(start) == s.charAt(end)){

return huiwen(s,start+1,end-1);

}

else{

return false;

}

}

(4).结果截图

                     

 

posted on 2017-10-14 00:49  面向bug的程序设计  阅读(232)  评论(0编辑  收藏  举报