部分一
使用计算机计算组合数:
(1)使用组合数公式利用n!来计算
(2)使用递推的方法用杨辉三角形计算
(3)使用递归的方法用组合数递推公式计算
设计思路:用递归解决n!问题,然后将上述公式解决。f(n)=n*f(n-1);
程序流程图:
运行结果截图:
程序源代码:
第一个:
package digui0101;
import java.util.Scanner;
public class AAA
{
public static void main(String[] args)
{
int k,n,a,s,d,f;
Scanner input =new Scanner(System.in);
System.out.println("请输入k,n");
k=input.nextInt();
n=input.nextInt();
if(k>n)
{
System.out.println("错误");
System.exit(0);
}
a=jiecheng(n);
s=jiecheng(k);
d=jiecheng(n-k);
f=a/(s*d);
System.out.println(f);
}
public static int jiecheng(int x)
{
int a;
if(x==1)a=1;
else a=x*jiecheng(x-1);
return a;
}
}
第二个:
package yanghuisanjiao;
import java.util.Scanner;
public class AA
{
public static void main(String[] args)
{
Scanner input =new Scanner(System.in);
int n;
System.out.println("请输入杨辉三角层数");
n=input.nextInt();
aaa(n);
}
public static void aaa(int n)
{
int i,j;
int[][] q=new int[n][n];
for(i = 0;i < n ;i++)
{
q[0][1]=0;
q[i][0]=1;
q[i][i]=1;
}
for(i=1;i<n;i++)
{
for(j=1;j<i;j++)
{
q[i][j]=q[i-1][j-1]+q[i-1][j];
}
}
for(i=0;i<n;i++)
{
for(j=0;j<=i;j++)
{
if(j!=i)System.out.print(q[i][j]);
else System.out.println(q[i][j]);
}
}
}
}
第三个:
package digui0102;
import java.util.Scanner;
public class AAAA
{
public static void main(String[] args)
{
int k,n,a,s,d;
Scanner input =new Scanner(System.in);
System.out.println("请输入k,n");
k=input.nextInt();
n=input.nextInt();
if(k>n)
{
System.out.println("错误");
System.exit(0);
}
a=jiecheng(n)/(jiecheng(k-1)*jiecheng(n-k-1));
s=jiecheng(n)/(jiecheng(k)*jiecheng(n-k));
d=a+s;
System.out.println(d);
}
public static int jiecheng(int x)
{
int a;
if(x==1)a=1;
else a=x*jiecheng(x-1);
return a;
}
}
部分二:汉诺塔
设计思想:用递归解决问题,由64-->63-->...-->1。如果要解决64个,就要先把前63个从柱子A移动到柱子B,再把第64个块移动到柱子C然后将前63个从柱子B移动到柱子C。
移动前63个块,就要先移动前62个块。。。依次类推到剩下最顶上的一个。
流程图:
运行结果截图:
程序代码:import java.util.Scanner;
public class Hanoi
{
public static void main(String[] args)
{
int n;
Scanner input =new Scanner(System.in);
System.out.println("请输入有n层塔");
n=input.nextInt();
hhh(n,'a','b','c');
}
public static void hhh(int n,char a,char b,char c)
{
if(n==1)aaa(a,c);
else
{
hhh(n-1,a,c,b);
aaa(a,c);
hhh(n-1,b,a,c);
}
}
public static void aaa(char a,char b)
{
System.out.println(a+"-->"+b);
}
}
部分三:回文
设计思想:递归解决:找出字符串长度x,找到字符串第一个字符n和最后一个字符m进行比较,再找第二个字符和第x-1个字符比较,直到找出中间两个字符比较。用布尔型变量输出true或false。
程序流程图:
运行结果截图:
程序源代码:package huiwen;
import java.util.Scanner;
public class palindrome
{
public static void main(String[] args)
{
Scanner input =new Scanner(System.in);
int n,m;
String x;
System.out.println("请输入字符串");
x=input.next();
boolean a;
n=0;
m=x.length() - 1;
a=aaa(x,n,m);
System.out.println("判断是否是回文结果为:"+a);
}
public static boolean aaa(String x,int n,int m)
{
if(n==m||m-n==1)
{
if(x.charAt(n)==x.charAt(m))return true;
else return false;
}
else
{
if(x.charAt(n)==x.charAt(m)&&aaa(x,n+1,m-1)==true)
{
return true;
}
else return false;
}
}
}