Java课后练习3

动手动脑1:手写随机代码

程序:package test;
public class sgg
{
private static final int N = 200;
private static final int LEFT = 40;
private static final int RIGHT = 10000;
private static long x0 = 1L;
private long a = 1103515245L;
private long c = 12345L;
private long m = 2147483648L;
// 产生随机数
private long rand ( long r )
{
// a,c,m为常数
 r = ( r * a + c ) % m;//Xn+1=(aXn + c)mod m
 return r;
 }
/**
* 表示a~b之间的一个随机数

* @param a
* @param b
* @param rand
* @return
*/
private long little ( int a, int b, long rand )
{
 return a + rand % ( b - a + 1 );
}
private void recursion ( int count, long rand )
{
 if (count >= N)
{
  return;
}
 rand = rand (rand);
 long r = little (LEFT, RIGHT, rand);
 System.out.print (r + "\n");
 recursion (++count, rand);
}
public static void main ( String[] args )
{
 sgg recur = new sgg ();
 recur.recursion (0, x0);
}
}

动手动脑2:以下程序有什么特殊之处?

在主函数下边还有两个static结构构成的成员方法。

课后作业1:计算组合数

1)程序:package test;
import java.util.*;
public class sgg {
 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 = sgg(n)/(sgg(k)*sgg(n - k));
 System.out.println("组合数的结果为:"+C);
 }
 
 public static int sgg(int n)//递归法计算阶乘
 {
  int s = 0;
  if(n < 0)
   System.out.println("错误!");
  else if(n == 1||n == 0)
   s = 1;
 
  else
   s = n * sgg(n -1);
  return s;
  }
 }

输出结果

2)程序:

package test;
import java.util.Scanner;
public class sgg {
 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 f = sgg(n,k);
  System.out.println(" 公式计算结果为: "+f);
  }

public static int sgg(int n,int k)
 {
  int f = 0;
  if(n == 1||k == 0||n == k)
   f = 1;
  else
   f = sgg(n - 1,k - 1) + sgg(n - 1,k);
  return f;
  }
 }

结果输出:

3)程序:package test;
import java.util.Scanner;
public class sgg {
 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();
  System.out.println("组合数结果为:"+sgg(n,k));
  in.close();
  }
 public static int sgg(int m,int n)
 {
  if(m<0||n<0||m<n)
   return 0;
  if(m==n)
   return 1;
  if(n==1)
   return m;
  return sgg(m-1,n)+sgg(m-1,n-1);
  }
 }

输出结果:

课后作业2:汉诺塔用JAVA实现

程序:

// TowersOfHanoi.java
// Towers of Hanoi solution with a recursive method.
public class TowersOfHanoi
{
   // recursively move disks between towers
   public static void solveTowers( int disks, int sourcePeg,
      int destinationPeg, int tempPeg )
   {
      // base case -- only one disk to move
      if ( disks == 1 )
      {
         System.out.printf( "\n%d --> %d", sourcePeg, destinationPeg );
         return;
      } // end if

// recursion step -- move (disk - 1) disks from sourcePeg
      // to tempPeg using destinationPeg
      solveTowers( disks - 1, sourcePeg, tempPeg, destinationPeg );

// move last disk from sourcePeg to destinationPeg
      System.out.printf( "\n%d --> %d", sourcePeg, destinationPeg );

// move ( disks - 1 ) disks from tempPeg to destinationPeg
      solveTowers( disks - 1, tempPeg, destinationPeg, sourcePeg );
   } // end method solveTowers

public static void main( String[] args )
   {
      int startPeg = 1; // value 1 used to indicate startPeg in output
      int endPeg = 3; // value 3 used to indicate endPeg in output
      int tempPeg = 2; // value 2 used to indicate tempPeg in output
      int totalDisks = 3; // number of disks
     
      // initial nonrecursive call: move all disks.
      solveTowers( totalDisks, startPeg, endPeg, tempPeg );
   } // end main
} // end class TowersOfHanoi

输出结果:

课后作业3:判断字符串是否为回文数

程序:

package test;
import java.util.*;
public class sgg {
public static void main(String[] args) {
// TODO Auto-generated method stub
 String str="";
 System.out.println("请输入一个字符串:");
 Scanner in=new Scanner(System.in);
 str=in.nextLine();
 StringBuffer sb=new StringBuffer(str);
 sb.reverse();
 int n=0;
 for(int i=0;i<str.length();i++){
  if(str.charAt(i)==sb.charAt(i))
   n++;
  }
 
 if(n==str.length())
  System.out.println(str+"是回文!");
 else
  System.out.println(str+"不是回文!");
 }
}

结果输出:

时间: 2024-10-12 12:45:23

Java课后练习3的相关文章

Java课后练习6

动手动脑1:阅读QiPan.java示例程序了解如何利用二维数组和循环语句绘制五子棋盘 1)源代码:import java.io.*; public class QiPan{ //定义一个二维数组来充当棋盘 private String[][] board; //定义棋盘的大小 private static int BOARD_SIZE = 15; public void initBoard() {  //初始化棋盘数组  board = new String[BOARD_SIZE][BOARD

java课后作业-4

一.编写一个方法,使用以上算法生成指定数目(比如1000个)的随机整数. public class suiji { private static final int N = 200; private static final int LEFT = 40; private static final int RIGHT = 10000; private static long x0 = 1L; private long a = 1103515245L; private long c = 12345L

Java课后练习9(异常处理)

动手动脑1: import javax.swing.*; class AboutException { public static void main(String[] a) { int i=1, j=0, k; k=i/j; try { k = i/j; // Causes division-by-zero exception //throw new Exception("Hello.Exception!"); } catch ( ArithmeticException e) { S

java课后有感

学习java中,我们都会遇见很多很多的问题,例如: 1.枚举类型是引用类型,枚举不属于原始数据类型,它的每个具体值都引用一个特定的对象.相同的值则引用同一个对象. 可以使用“==”和equals()方法直接比对枚举变量的值,换句话说,对于枚举类型的变量,“==”和equals()方法执行的结果是等价的. 正数的反码和补码都与原码相同: 负数的反码.补码和原码不相同,负数的反码:原码中除去符号位,其他的数值位取反,0变1,1变0,负数的补码:其反码加一,而且在java中数都是有符号的,在计算机运算

Java 课后作业

一.可以使用instanceof运算符判断一个对象是否可以转换为指定的类型 代码:            public class TestInstanceof { public static void main(String[] args) { //声明hello时使用Object类,则hello的编译类型是Object,Object是所有类的父类 //但hello变量的实际类型是String Object hello = "Hello"; //String是Object类的子类,所

java课后作业6

一.运行TestInherits.java 结论:通过super调用基类构造方法,必须是子类构造方法中的第一个语句. 二.为什么子类的构造方法在运行之前,必须调用父类的构造方法?能不能反过来?为什么不能反过来? 子类是从父类继承来的,所以想用子类创建对象的时候,必须要先建立父类的对象,子类有父类的属性和方法:就要给父类的属性分配内存空间,在创建对象的时候如果父类中的数据需要初始化,那么就必须要调用.不能反过来,因为基类和子类就像现实中的父亲和子女一样,如果反过来就乱了辈分,而且对于子类不知道有几

java课后作业5

[问题]随机生成10个数,填充一个数组,然后用消息框显示数组内容,接着计算数组元素的和,将结果也显示在消息框中. 设计思路: 1.申请一个长度为10的数组 2.计算机随机生成10个数,并赋给数组 3.消息框显示数组内容 4.接着计算数组元素的和 5.将数组元素的和显示在消息框 程序流程图: 源程序代码: import java.util.Random; import javax.swing.JOptionPane; public class Test { public static void m

Java课后简答题

1.简述Java的特点. 面向对象.跨平台性.健壮性.安全性.可移植性.多线程性.动态性等. 2.简述JRE与JDK的区别. JRE(Java Runtime Environment,Java运行时环境),它相当于操作系统部分,提供了Java程序运行时所需要的基本条件和许多Java基础类,例如,IO类.GUI控件类.网络类等.JRE是提供给普通用户使用的,如果你只想运行别人开发好的Java程序,那么,你的计算机上必须且只需安装JRE. JDK(Java Development Kit,Java开

Java课后思考题

1.简述path和classpath的区别. path:path环境变量是系统环境变量中的一种,它用于保存一系列可执行文件的路径,每个路径之间以分号分隔.当在命令行窗口运行一个可执行文件时,操作系统首先会在当前目录下查找是否存在该文件,如果不存在会继续在path环境变量中定义的路径下去寻找这个文件,如果仍未找到,系统会报错. classpath:classpath环境变量也是系统环境变量中的一种,它用于保存一系列类(.class)文件的路径.当Java虚拟机需要运行一个类时,会先在classpa