一、使用组合数公式利用n!来计算。
设计思想:1.先输入你要计算的N和K。
2.再用公式表示n!。
程序流程图:
源程序代码:
package yanghu;
import java.util.*;
public class sanjiao {
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;
}
}
程序截图:
二、使用递推的方法用杨辉三角形计算。
设计思想:1.输入N和K。
2.用递归的思想计算。
设计流程图:
程序源代码:
package yanghu;
import java.util.Scanner;
public class sanjiao2 {
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 = CombinationNumber(n,k);
System.out.println("C(n,k) = "+C);
}
public static int CombinationNumber(int n,int k)
{
if(k == 0||n == k) return 1;
int s=Math.min(k,n-k);
int p = 1,q = 0;
for(int i = 1; i <= s; i++)
{
q = p * (n-i+1)/(i);
p = q;
}
return q;
}
}
程序截图:
三、使用递归的方法用组合数递推公式计算
设计思想:1.输入n和k。
2.用递归思想计算。
程序流程图:
程序源代码:
package yanghu;
import java.util.Scanner;
public class sanjiao3 {
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 = CombinationNumber(n,k);
System.out.println("C(n,k) = "+C);
}
public static int CombinationNumber(int n,int k)
{
int c = 0;
if(n == 1||k == 0||n == k)
c = 1;
else
c = CombinationNumber(n - 1,k - 1) + CombinationNumber(n - 1,k);
return c;
}
}
程序截图:
四、递归编程解决汉诺塔问题。
设计思想:首先想明白什么是汉诺塔问题,然后在纸上把自己想得画出来,然后考虑递归怎么用。
程序流程图:
程序源代码:
package hannuota;
public class nuo{
static int nDisks = 3;
public static void main(String[] args) {
doTower(nDisks, 'A', 'B', 'C');
}
public static void doTower(int topN,char from,char inter,char to){
if(topN == 1)
System.out.println("Disk 1 from "+from+" to "+to);
else{
doTower(topN-1, from, to, inter);
System.out.println("Disk "+topN+" from "+from+" to "+to);
doTower(topN-1, inter, from, to);
}
}
}
程序截图:
五、使用递归方式判断某个字串是否是回文。
设计思想:输入字符,运用递归方法判断是不是回文。
程序流程图:
程序源代码:package huiwenpanduan;
import java.util.*;
public class huiwen {
public static void main(String[] args) {
String temp = "";
char[] a;
Scanner in = new Scanner(System.in);
System.out.print("请输入要判断的字符串:");
String str = in.next();
a = str.toCharArray();
for(int i = a.length - 1;i >= 0;i--)
{
temp += a[i];
}
if(str.equals(temp))
System.out.println(str+"是回文数!");
else
System.out.println(str+"不是回文数!");
}
}
程序截图: