博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Java02-方法 课后作业
阅读量:6565 次
发布时间:2019-06-24

本文共 2730 字,大约阅读时间需要 9 分钟。

一、组合数

1.设计思想

首先定义两个变量n和k,采用三种方法计算组合数

第一种,利用组合数公式计算,这种方法主要就是定义一个求阶乘的方法,利用递归可以求得阶乘

第二种,利用递归的方法使用组合数递推公式,递归调用函数,从后往前推导

第三种,利用杨辉三角的原理,设置二维数组,从上到下依次保存杨辉三角所得数,根据输入的nk值,找出对应的值

2.流程图

(1)

(2)

(3)

3.源代码

package test;

import java.util.Scanner;
import java.math.BigInteger;
public class Classtest1
{
public static BigInteger zuheshu(int k,int n)
{
BigInteger i;
i=jiecheng(n).divide((jiecheng(k).multiply(jiecheng(n-k))));
return i;
}
public static BigInteger jiecheng(int i)
{
if(i==1 || i==0){
return BigInteger.valueOf(1);
}
return BigInteger.valueOf(i).multiply(jiecheng((i-1)));
}
public static BigInteger cal(int k,int n)
{
if(n==k||k==0)
return BigInteger.valueOf(1);
else if(k==1)
return BigInteger.valueOf(n);
else
return cal(k,n-1).add(cal(k-1,n-1));
}
public static int Ditui(int i,int j)
{
int a[][]=new int[100][100];
a[0][0]=1;
int result=1;
for(int p=1;p<100;p++)
for(int q=0;q<=p;q++)
{
if(q==0||p==q)
{
a[p][q]=1;
}
else
a[p][q]=a[p-1][q-1]+a[p-1][q];
if(p==i&&q==j)
{
result=a[p][q];
break;
}

}

return result;

}
public static void main(String[] args)
{
int n,k;
Scanner input=new Scanner(System.in);
System.out.println("请输入一个正整数作为n值:");
n=input.nextInt();
System.out.println("请输入一个正整数作为k值:");
k=input.nextInt();
System.out.println("使用组合数公式计算出的组合数个数为:"+zuheshu(k,n));
System.out.println("使用递归的方法计算出的组合数个数为:"+cal(k,n));
System.out.println("使用杨辉三角计算出的组合数个数为:"+Ditui(n,k));
}
}

4.截图

 

二、汉诺塔

1.设计思想

三个柱子:1.原柱子2.中间柱(辅助)3.目标柱

首先把1柱上"共"n-1个通过3移到2(递归),如果只剩一个:把1柱上"第"n个直接移动到3柱,把2柱上"共"n-1个通过1移到3(递归)

2.流程图

3.源代码

package test;

import java.util.Scanner;
public class Classtest2
{
public void Hnt(int a,char one,char two,char three)
{
if(a==1)
move(one,three);
else
{
Hnt(a-1,one,three,two);
move(one,three);
Hnt(a-1,two,one,three);
}
}
public void move(char x,char y)
{
System.out.println("从"+x+"移动到"+y);
}
public static void main(String[] args)
{
Classtest2 h=new Classtest2();
Scanner input=new Scanner(System.in);
System.out.print("请输入初始盘子数量:");
int num=input.nextInt();
h.Hnt(num,'1','2','3');

}

}

4.截图

 

三、回文

1.设计思想

输入一个字符串,将字符串最大长度赋给一个变量,判断字符串长度,如果为0或1,则输出是回文数,如果不是,则调用递归,从字符串头尾字符开始分别判断是否相等。

2.流程图

3.源代码

package test;

import java.util.Scanner;
public class Classtest3
{
public int judge(String str,int length,int star,int stop)
{
if(length==0||length==1)
{
return 1;
}
if(str.charAt(star)!=str.charAt(stop))
{
return 0;
}
else
{
return judge(str,length-2,star+1,stop-1);
}
}

public static void main(String[] args)

{
Scanner input=new Scanner(System.in);
System.out.println("输入一个字符串:");
String str;
str=input.nextLine();
int l=str.length();
Classtest3 hw=new Classtest3 ();
if(hw.judge(str, l, 0, l-1)==1)
{
System.out.println("是回文字符串");
}
else
System.out.println("不是回文字符串");

}

}

4.截图

 

 

转载于:https://www.cnblogs.com/sakura--/p/7663026.html

你可能感兴趣的文章
centos7.3 安装ovirt-engine4.0 版本
查看>>
Jenkins+git+tomcat 自动化持续部署
查看>>
项目log日志打印
查看>>
Openstack的环境的Mitaka部署环境服务,实例(1)
查看>>
文档的压缩与打包
查看>>
python3 在不同操作系统安装第三方库方法
查看>>
redhat5.8+mfs(提供软件包文档)
查看>>
python编写登录接口
查看>>
MySQL高可用方案之多级复制
查看>>
OVS 中的各种网络设备 - 每天5分钟玩转 OpenStack(128)
查看>>
Python火车票代码
查看>>
Android开发者指南(7) —— App Install Location
查看>>
Trafficserver Cluster模式
查看>>
亚马逊推出 Blox,用于 EC2 容器服务的开源工具集合
查看>>
Linux:在中国没有真正的新闻
查看>>
iOS推送功能极光推送的介绍与实现
查看>>
单用户模式与grub加密
查看>>
Chromium Graphics: 3D上下文及其虚拟化 - Part I
查看>>
jquery javascript获得网页的高度和宽度
查看>>
2019 -2-15 复习
查看>>