码迷,mamicode.com
首页 > 编程语言 > 详细

JAVA第二章课后作业

时间:2017-10-13 19:12:08      阅读:259      评论:0      收藏:0      [点我收藏+]

标签:lin   oid   汉诺塔   err   alt   images   sof   结束   toc   

1.(1)使用组合数公式利用n!来计算

技术分享

 

设计思想:利用递归法求阶乘,利用公式即可求得组合数的计算结果

import java.util.*;

public class CombinationNumber {
public static void main(String[] args) {
// TODO Auto-generated method stub
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;
}
}

技术分享

(2)使用递推的方法用杨辉三角形计算技术分享

设计思想:利用for循环逐步求得组合数结果。

技术分享

import java.util.Scanner;

public class Combination2 {

public static void main(String[] args) {
// TODO Auto-generated method stub
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;
}
}

技术分享

(3)使用递归的方法用组合数递推公式计算技术分享

设计思想:利用递推公式,递归方式求得;注意结束条件。

技术分享

import java.util.Scanner;

public class Combination3 {

public static void main(String[] args) {
// TODO Auto-generated method stub
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;
}
}

技术分享

2.递归编程解决汉诺塔问题

设计思想:当A塔上有n个盘子时,先将A塔上编号 1 至 n-1 的盘子移动到B塔上(借助C塔),然后将A塔上n号盘子移动到C塔上,最后将B塔上的n-1个盘子借助A塔移动到C塔上。即用递归实现,结束条件是 n=1 时只需直接移动;遇到的问题:如何递归实现。

技术分享

import java.util.*;
public class TowersOfHanoi2 {

public static void main(String[] args) {
// TODO Auto-generated method stub
Scanner in = new Scanner(System.in);
System.out.print("请输入盘子个数:");//盘子从上至下编号从1到n
int p = in.nextInt();
char ch1 = ‘A‘;
char ch2 = ‘B‘;
char ch3 = ‘C‘;
Hanoi(p,ch1,ch2,ch3);//最终实现1到n个盘子从A柱移到C柱
}
public static void move(int n,char from,char to)
{
System.out.printf( "将%d号盘子%c --> %c\n",n,from,to);
}
public static void Hanoi(int n,char from,char mid,char to)
{
if(n == 1)
move(1,from,to);//结束条件,当n = 1时移动一次即可
else
{Hanoi(n-1,from,to,mid);//将n-1个盘子从A移到B
move(n,from,to);//将n个盘子移到C
Hanoi(n-1,mid,from,to);//将n-1个盘子从B移到C
}
}
}

技术分享

3.使用递归方式判断某个字串是否是回文

设计思想:将输入的字符串转化为数组形式储存才能方便比较(利用 toCharArray() 函数)

技术分享

import java.util.*;
public class Palindrome {

public static void main(String[] args) {
// TODO Auto-generated method stub
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+"不是回文数!");
}
}

 技术分享技术分享技术分享

 

JAVA第二章课后作业

标签:lin   oid   汉诺塔   err   alt   images   sof   结束   toc   

原文地址:http://www.cnblogs.com/as1165/p/7661951.html

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