java课后实验性问题2
课后作业一:计算组合数
程序设计思想:
从键盘获取组合数,判断是否构成组合数。分别用三种方法计算组合数输出。
程序流程图:

import java.util.Scanner;
public class Test1 {
public static void main(String[] args){
System.out.print("请输入数:");
Scanner sc = new Scanner(System.in);
//从键盘获取组合数
int n = sc.nextInt();
System.out.print("请输入组合个数:");
int k = sc.nextInt();
//判断格式 正确计算组合数
if(n < k){
System.out.print("输入错误!");
}
else{
System.out.println("组合数计算:" + zhuhe(n, k));
System.out.println("杨辉三角计算:" + ditui(n, k));
System.out.println("组合数递推计算:" + digui(n, k));
}
}
//递归递推计算
public static long digui(int n, int k){
return ditui(n, k);
}
//杨辉三角递推计算
public static long ditui(int n, int k){
long m1, m2, sum;
m1 = calculateN(n - 1) / (calculateN(k - 1) * calculateN((n - 1) - (k - 1)));
m2 = calculateN(n - 1) / (calculateN(k) * calculateN((n - 1) - k));
sum = m1 + m2;
return sum;
}
//公式计算
public static long zhuhe(int n,int k){
return calculateN(n) / (calculateN(k) * calculateN(n - k));
}
//递归计算阶乘
public static long calculateN(int n){
if(n==1 || n==0){
return 1;
}
return n * calculateN(n - 1);
}
}

课后作业二:汉诺塔问题
程序设计思想:
把N个盘子从A座移到C座,但每次只能允许移动一个盘子,并且在移动过程中,3个座上的盘子始终保持大盘在下,小盘在上。在移动过程中可以利用B座。
程序流程图:

import java.util.Scanner;
public class Test2{
public static void main(String[] args){
int n;
System.out.print("输入盘子层数:");
Scanner sc = new Scanner(System.in);
//从键盘获取盘子数
n = sc.nextInt();
//递归调用
hannuo(n, 'A', 'B', 'C');
}
public static void hannuo(int n, char a, char b, char c){
//n=1时,将A上的盘子直接移动到C上
if(n == 1){
move(a, c, 1);
}
/*
1,将A上n-1个盘子移动到B上(此步骤的解决办法与移动n阶盘子的方法完全一样只是问题的规模减小1阶)
2,将A上的一个盘子移动到C
3,将B上的n-1个盘子移动到C上。
*/
else{
hannuo(n - 1, a, c, b);
move(a, c, n);
hannuo(n - 1, b, a, c);
}
}
//输出操作步骤
public static void move(char x, char y, int n){
System.out.println(x + "的第个" + n + "盘子移动到" + y);
}
}

课后作业三:回文字符串
程序设计思想:
从键盘获取字符串,定义数组。数组元素依次获取字符。通过递归方法比较数组元素,判断是否是回文字符串。
程序流程图:

import java.io.*;
public class Test3{
public static void main(String[] args) throws IOException{
String str;
int i = 0;
System.out.print("输入字符串:");
//从键盘获取字符串
BufferedReader buf = new BufferedReader(new InputStreamReader(System.in));
str = buf.readLine();
//定义数组 数组元素依次获取字符
char [] ch = str.toCharArray();
//判断是否是回文字符串
if(huiwen(ch,i) == 1)
System.out.println("是回文字符串");
else
System.out.println("不是回文字符串");
}
//递归判断回文
public static int huiwen(char [] ch,int i){
if(i == ch.length / 2 )
return 1;
if(ch[i] != ch[ch.length - i - 1])
return 0;
huiwen(ch,i + 1);
return 1;
}
}

java课后实验性问题2的更多相关文章
- java课后实验性问题5
课后作业一:字符串加密 程序设计思想: 从键盘获取字符串,将字符串转为字符数组,将每个元素加事前协定的“key”,再转为字符串输出. 程序流程图: 源代码: import java.util.Scan ...
- java课后实验性问题4
课后作业一: 使用类的静态字段和构造函数,我们可以跟踪某个类所创建对象的个数.请写一个类,在任何时候都可以向它查询“你已经创建了多少个对象? 设计思路:定义类的构造函数时使静态变量i进行i++,即每构 ...
- java课后实验性问题7
1.异常处理 import javax.swing.*; class AboutException { public static void main(String[] a) { int i = 1, ...
- java课后实验性问题6
1.继承条件下的构造方法调用. class Grandparent { public Grandparent(){ System.out.println("GrandParent Creat ...
- java课后实验性问题3
一 .生成随机数 import java.util.*; public class Test1 { public static void main(String[] args) { //建立一个生产随 ...
- java课后实验性问题1
一.一个java类文件中只能有一个公有类吗? 测试代码 public class Test{ public static void main(String[] args){ } public clas ...
- JAVA 数组作业——动手动脑以及课后实验性问题
JAVA课后作业——动手动脑 一:阅读并运行示例PassArray.java,观察并分析程序输出的结果,小结,然后与下页幻灯片所讲的内容进行对照. 1.源代码 // PassArray.java // ...
- JAVA语法基础作业——动手动脑以及课后实验性问题 (八)
一.动手动脑 运行AboutException.java示例,了解Java中实现异常处理的基础知识. 1)源代码 import javax.swing.*; class AboutException ...
- JAVA 多态和异常处理作业——动手动脑以及课后实验性问题
1. 阅读以下代码(CatchWho.java),写出程序运行结果: 1) 源代码 public class CatchWho { public static void main(String[] ...
随机推荐
- restTemplate源码解析(一)构造restTemplate的Bean实例
所有文章 https://www.cnblogs.com/lay2017/p/11740855.html 正文 构造一个restTemplate的Bean实例很容易,只需这样配置 @Bean publ ...
- 空a标签在IE下无效之解决方法
过程就不分析了,只说解决方法: 1.给a标签添加样式:background:url(about:blank); 2.给a标签随便添加背景色或者背景图片,然后将a标签的透明度设置为0,不过在IE中需要使 ...
- 使用vue国际化中出现内置的组件无法切换语言的问题(element-ui、ivew)
在main.js中引入对应组件的语言包 eg: import VueI18n from 'vue-i18n'; // 引入国际化 import elementEn from 'element-ui/l ...
- VUE CLI3 less 全局变量引用
方法一 1.添加依赖 style-resources-loader 2.vue.config.js中添加 module.exports = { pluginOptions: { 'style-reso ...
- 将两个数组相同index的value合并成一个新的value组成一个新的数组
将两个数组相同index的value合并成一个新的value组成一个新的数组 前提: 这两个数组的长度相同 生成后的新数组长度也相同 返回值都是对象 把rows对象的key和value弄成两个数组, ...
- 【外网不好用】可以尝试添加dns即可解决上不去外网的问题。
可以将IPv4这里的DNS修改成以下内容再尝试上网试试.
- K2 BPM_当BPM遇上RPA | 企业合规和风险管理从此更高效_全球领先的工作流引擎
强化企业合规与风险管理已成为全球企业发展的共识,尤其是对于药企.银行.地产这类对于合规性要求高的企业而言,识别预测潜在的管理风险和遵循不断升级的合规义务,是保证企业平稳运行的关键. 如何从流程层面降低 ...
- SpringCloud之RabbitMQ消息队列原理及配置
本篇章讲解RabbitMQ的用途.原理以及配置,RabbitMQ的安装请查看SpringCloud之RabbitMQ安装 一.MQ用途 1.同步变异步消息 场景:用户下单完成后,发送邮件和短信通知. ...
- 1.Java集合-HashMap实现原理及源码分析
哈希表(Hash Table)也叫散列表,是一种非常重要的数据结构,应用场景及其丰富,许多缓存技术(比如memcached)的核心其实就是在内存中维护一张大的哈希表,而HashMap的实现原理也常常 ...
- golang使用sftp连接服务器远程上传、下载文件
安装github.com/pkg/sftp 我们之前介绍了,golang如何通过ssh连接服务器执行命令,下面我们来如何上传文件,上传文件同样需要之前的ssh,但是除此之外还需要一个模块,直接使用go ...