码迷,mamicode.com
首页 > 其他好文 > 详细

2.方法课后作业

时间:2017-10-13 12:40:51      阅读:184      评论:0      收藏:0      [点我收藏+]

标签:简化   bst   png   new   参数   line   ati   rate   通过   

一.计算组合数

1.利用n!计算

设计思想:可以把问题简化为求n的阶乘,然后再利用公式求解

程序流程图:

技术分享

技术分享

 

源代码

import java.util.Scanner;
public class zuhe {

public static void main(String[] args) {
// TODO 自动生成的方法存根
System.out.println("请输入组合数的参数n,k");
Scanner in1=new Scanner(System.in);
int n=in1.nextInt();
Scanner in2=new Scanner(System.in);
int k=in2.nextInt();
in1.close();
in2.close();
int sum=jiecheng(n)/(jiecheng(k)*jiecheng(n-k));
System.out.println("C("+n+","+k+")="+sum);

}
public static int jiecheng(int p)
{
if(p<=1)
{
return 1;
}
else
return p*jiecheng(p-1);
}
}

程序截图:

技术分享

2.用递推的方法用杨辉三角形计算

设计思想:

杨辉三角可以反映组合数的值,例如杨辉三角中第六排三列为10,即对应组合数c(5,2);通过递归建立杨辉三角,

再通过杨辉三角输出组合数值。

程序流程图

技术分享

技术分享

源代码

 

import java.util.Scanner;
public class zuhe2 {

public static void main(String[] args) {
// TODO 自动生成的方法存根
System.out.println("请输入组合数的参数n,k");
Scanner in1=new Scanner(System.in);
int n=in1.nextInt();
Scanner in2=new Scanner(System.in);
int k=in2.nextInt();
in1.close();
in2.close();
System.out.println("C("+n+","+k+")="+jiecheng(n,k));
}
public static int jiecheng(int a,int b)
{
if(a<0||b<0||a<b)
return 0;
if(a==b)
return 1;
if(b==1)
return a;
return jiecheng(a-1,b)+jiecheng(a-1,b-1);

}
}

程序截图

技术分享

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

1.设计思想:通过对组合数递推公式的递归实现,输出组合数的值

2.程序流程图:

技术分享

3.源程序代码:

public class Zuheshu_2 {

public static void main(String[] args) {
// TODO Auto-generated method stub
Scanner in=new Scanner(System.in);
System.out.println("m 应大于n");
System.out.println("格式为c(m,n)");
System.out.println("m:");
int m=in.nextInt();
System.out.println("n:");
int n=in.nextInt();
System.out.println("c"+"("+m+","+n+")"+"="+digui(n,m));
}
public static int digui(int n,int m)
{
if(n>m||n<0||m<0){return 0;}
if(n==1){return m;}
if(n==m){return 1;}
return digui(n-1,m-1)+digui(n,m-1);
}
}

程序截图

技术分享

二.汉诺塔问题

设计思想:

假定要把n个盘子按题目规定由a杆借助b杆移动到c杆。模拟这一过程的算法称为hanio(n,a,b,c)。则有:第一步:先把上面的n-1个盘子设法借助b杆放到c杆,记做hanio(n,a,c,b); 第二步:把第n个盘子从a杆直接移到b杆第三步:把c杆上的n-1个盘子借助a杆移到b杆,记做hanio(n,c,a,b)。

程序流程图:

技术分享

源代码:

import java.util.Scanner;
public class hanio {

public static void main(String[] args) {
// TODO 自动生成的方法存根
Scanner in=new Scanner(System.in);
int i = in.nextInt();
char a =‘A‘,b=‘B‘,c=‘C‘;
hanio(i,a,b,c);
}
public static void hanio(int n,char a,char b,char c){
if(n==1)
System.out.println("移动"+n+"号盘子从"+a+"到"+c);
else{
hanio(n-1,a,c,b);//把上面n-1个盘子从a借助b搬到c
System.out.println("移动"+n+"号盘子从"+a+"到"+c);//紧接着直接把n搬动c
hanio(n-1,b,a,c);//再把b上的n-1个盘子借助a搬到c
}
}
}

程序截图:

技术分享

三.回文字符串

设计思想:若字符串长度<=1,则一定为回文字符串。利用函数判断首尾字符是否相等,若相同,则截去首尾返回到函数,直到字符串位数<=1

程序流程图:

技术分享技术分享

源代码:

import java.util.Scanner;
public class huiwen {

public static void main(String[] args) {
// TODO 自动生成的方法存根
System.out.println("请输入一个字符串:");
Scanner in=new Scanner(System.in);
String str=in.nextLine();
if(huiwen(str)==1)
{
System.out.println(str+"是回文字符串");
}
else
System.out.println(str+"不是回文字符串");
in.close();
}
public static int huiwen(String s)
{
int length=s.length();
if(length==0||length==1)
{
return 1;
}
char head=s.charAt(0);
char tail=s.charAt(length-1);
if(head!=tail)
{
return 0;
}
return huiwen(s.substring(1,length-1));
}

}

程序截图

技术分享

 

 

 

 

 

2.方法课后作业

标签:简化   bst   png   new   参数   line   ati   rate   通过   

原文地址:http://www.cnblogs.com/lxy10375/p/7660249.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!