课后作业一:计算组合数

程序设计思想:

从键盘获取组合数,判断是否构成组合数。分别用三种方法计算组合数输出。

程序流程图:

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的更多相关文章

  1. java课后实验性问题5

    课后作业一:字符串加密 程序设计思想: 从键盘获取字符串,将字符串转为字符数组,将每个元素加事前协定的“key”,再转为字符串输出. 程序流程图: 源代码: import java.util.Scan ...

  2. java课后实验性问题4

    课后作业一: 使用类的静态字段和构造函数,我们可以跟踪某个类所创建对象的个数.请写一个类,在任何时候都可以向它查询“你已经创建了多少个对象? 设计思路:定义类的构造函数时使静态变量i进行i++,即每构 ...

  3. java课后实验性问题7

    1.异常处理 import javax.swing.*; class AboutException { public static void main(String[] a) { int i = 1, ...

  4. java课后实验性问题6

    1.继承条件下的构造方法调用. class Grandparent { public Grandparent(){ System.out.println("GrandParent Creat ...

  5. java课后实验性问题3

    一 .生成随机数 import java.util.*; public class Test1 { public static void main(String[] args) { //建立一个生产随 ...

  6. java课后实验性问题1

    一.一个java类文件中只能有一个公有类吗? 测试代码 public class Test{ public static void main(String[] args){ } public clas ...

  7. JAVA 数组作业——动手动脑以及课后实验性问题

    JAVA课后作业——动手动脑 一:阅读并运行示例PassArray.java,观察并分析程序输出的结果,小结,然后与下页幻灯片所讲的内容进行对照. 1.源代码 // PassArray.java // ...

  8. JAVA语法基础作业——动手动脑以及课后实验性问题 (八)

    一.动手动脑 运行AboutException.java示例,了解Java中实现异常处理的基础知识. 1)源代码 import javax.swing.*; class AboutException ...

  9. JAVA 多态和异常处理作业——动手动脑以及课后实验性问题

    1.  阅读以下代码(CatchWho.java),写出程序运行结果: 1)  源代码 public class CatchWho { public static void main(String[] ...

随机推荐

  1. 关于Vue中,在方法中使用(操作)子组件获取到的数据

    已知,子组件通过props获取父组件传过来的数据,而这个数据是无法在created.mounted生命周期中使用的,只能在beforeUpdated或者updated获取到: 但是如果我们要使用这个数 ...

  2. React中setState如何修改深层对象?

    在React中经常会使用到setState,因为在react生态中,state就是一切.在开发过程中,时长会在state中遇到一些比较复杂的数据结构,类似下面这样的: 这时需要我们修改list中obj ...

  3. K2 BPM_“选BPM还是RPA?”,这不是一道单选题_全业务流程管理专家

    在我们和企业讨论流程自动化的时候,经常会被问到一个问题,“公司目前正在调研市面上的业务流程自动化产品,我们已经把选择范围缩小到了BPM和RPA之间.我们应该怎么选择?BPM能做的好像RPA都能做到.” ...

  4. cocos发布遇到的问题

    学习第二天,用官方的demo进行打包,出现以下问题: 第一个问题: 报错信息:scene 没有保存,请先保存相关信息再进行构建. 解决方案:ctrl+s保存即可,一开始没注意前面的英文是场景的意思 第 ...

  5. html 输入框ios苹果手机显示九宫格数字键盘

    只需要在input标签加上type=‘tel’  即可

  6. 阿里高级架构师教你使用Spring JMS处理消息事务源码案例

    消费者在接收JMS异步消息的过程中会发生执行错误,这可能会导致信息的丢失.该源码展示如何使用本地事务解决这个问题.这种解决方案可能会导致在某些情况下消息的重复(例如,当它会将信息储存到数据库,然后监听 ...

  7. Visual Studio 2017使用

    常用快捷方式 Ctrl + KK插入书签 取消书签Ctrl + KP 上一个书签Ctrl + KN 下一个数千Ctrl + F3 先一个关键词Shift + F3 上一个关键词 Ctrl + KC 添 ...

  8. winform中使用缓存

    文章:Winform里面的缓存使用 另外一篇文章:缓存-MemoryCache Class

  9. 【基础数位DP-模板】HDU-2089-不要62

    不要62 Time Limit: / MS (Java/Others) Memory Limit: / K (Java/Others) Total Submission(s): Accepted Su ...

  10. Java核心技术 卷一 复习笔记(丁

    面向对象1.面向对象设计概述 1.1.面向对象是什么 面向对象是一种程序设计范型(简称OOP),是针对对象进行开发,简化开发过程的一种设计方式 1.2.类 类是构造对象的模板,相当于一个烘焙模板,而对 ...