组合数
一.组合数公式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+1行k列的数。
(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) 编辑 收藏 举报