课程作业 02 2017.10.13
课后作业1
使用计算机计算组合数:
(1)使用组合数公式利用n!来计算
设计思想:通过for循环分别求得组合数中的的分子分母各项求出,再求组合数
程序流程图:
源程序代码:
//20163591 陈天时 信1605-3
import java.util.Scanner;
public class zuheshu
{
@SuppressWarnings("unused")
public static void main(String[] args)
{
Scanner input=new Scanner(System.in);
System.out.print("请输入n:");
int n=input.nextInt();
System.out.print("请输入k:");
int k=input.nextInt();
int a=1,b=1,c=1,C;
for(int i=1;i<=n;i++)
{
a=a*i;
}
for(int i=1;i<=k;i++)
{
b=b*i;
}
for(int i=1;i<=n-k;i++)
{
c=c*i;
}
C=a/(b*c);
System.out.println("C="+C);
}
}
结果截图:
(2)使用递推的方法用杨辉三角形计算
1设计思想:通过构建杨辉三角来寻找组合数,
2程序流程图
3源程序代码:
//20163591 陈天时 信1605-3
import java.util.Scanner;
public class yanghuisanjiao
{
public static void main(String[] args)
{
@SuppressWarnings("resource")
Scanner input=new Scanner(System.in);
System.out.print("请输入n:");
int n=input.nextInt();
System.out.print("请输入k:");
int k=input.nextInt();
int [][] yhsj=new int [30][30];
for(int i=0;i<30;i++)
for(int j=0;j<30;j++)
{
yhsj[i][0]=1;
if(j>0&&j<i)
yhsj[i][j]=yhsj[i-1][j-1]+yhsj[i-1][j];
else if(i==j)
yhsj[i][j]=1;
}
System.out.print("C="+yhsj[n][k]);
}
}
4结果截图
(3)使用递归的方法用组合数递推公式计算
1设计思想:用递归函数,递归求解组合数
2程序流程图:
3源程序代码:
//20163591 陈天时 信1605-3
import java.util.Scanner;
public class digui
{
static int fangfa(int n, int k)
{
if(k==n||k==0)
return 1;
if(n==0||n<k)
return 0;
return fangfa(n-1,k-1)+fangfa(n-1,k);
}
public static void main(String[] args)
{
@SuppressWarnings("unused")
Scanner input=new Scanner(System.in);
System.out.print("请输入n:");
int n=input.nextInt();
System.out.print("请输入k:");
int k=input.nextInt();
System.out.println("C="+fangfa(n,k));
}
}
4结果截图:
课后作业2
递归编程解决汉诺塔问题
源程序代码:
//20163591 陈天时 信1605-3
import java.util.Scanner;
public class hannuota
{
public static void hnt(int n,char a,char b,char c)
{
if(n==1)
{
System.out.println("1号盘子从"+a+"移动到"+b);
return;
}
hnt(n-1,a,c,b);
System.out.println(+n+"号盘子从"+a+"移动到"+c);
hnt(n-1,c,b,a);
}
public static void main(String[] args)
{
@SuppressWarnings({ "unused", "resource" })
Scanner input=new Scanner(System.in);
hnt(4,'A','B','C');
}
}
课后作业3
使用递归方式判断某个字串是否是回文( palindrome )
1设计思想:通过eclipse中自带的类来将字符串倒过来,再构建一个新的字符串将字符串填入,再和原来的一一进行比较。
2程序流程图
3源程序代码:
//20163591 陈天时 信1605-3
import java.util.Scanner;
public class palindrome
{
public static void main(String[] args)
{
Scanner input=new Scanner(System.in);
String str="";
System.out.println("请输入一个字符串:");
Scanner in=new Scanner(System.in);
str=in.nextLine();
StringBuffer dao=new StringBuffer(str);
dao.reverse();
int n=0;
for(int i=0;i<str.length();i++)
{
if(str.charAt(i)==dao.charAt(i))
n++;
}
if(n==str.length())
System.out.println(str+"是回文字符串");
else
System.out.println(str+"不是回文字符串");
}
}
4结果截图