zoukankan      html  css  js  c++  java
  • Java课堂练习3

    动手动脑1:

    Modulus=231-1=int.MaxValue Multiplier=75=16807 C=0 当显示过231-2个数之后,才可能重复。

    编写一个方法,使用以上算法生成指定数目(比如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;
    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 + " ");
    recursion (++count, rand);
    }

    public static void main ( String[] args )
    {
    suiji recur = new suiji ();
    recur.recursion (0, x0);
    }
    }

    动手动脑2:

    请看以下代码,你发现了有什么特殊之处吗?

     上述示例代码展示了Java的“方法重载(overload)”特性。满足以下条件的两个或多个方法构成“重载”关系:1.方法名相同(square)2.参数类型不同(int,double),参数个数不同或参数类型的顺序不同。

    课后作业1:

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

    package text;
    import java.util.*;
    public class jiecheng {

    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);

    }
    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)使用递推的方法用杨辉三角形计算技术分享

    package text;
    import java.util.Scanner;
    public class yhsj {

    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 = CombinationNumber(n,k);
    System.out.println(" 公式计算结果为: "+f);
    }
    public static int CombinationNumber(int n,int k)
    {
    int f = 0;
    if(n == 1||k == 0||n == k)
    f = 1;
    else
    f = CombinationNumber(n - 1,k - 1) + CombinationNumber(n - 1,k);
    return f;

    }

    }

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

    package text;
    import java.util.Scanner;
    public class ditui {

    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("组合数结果为:"+jieguo(n,k));
    in.close();

    }
    public static int jieguo(int m,int n)
    {
    if(m<0||n<0||m<n)
    return 0;
    if(m==n)
    return 1;
    if(n==1)
    return m;
    return jieguo(m-1,n)+jieguo(m-1,n-1);
    }

    }

    课后作业2:

    递归编程解决汉诺塔问题

    package text;
    import java.util.*;
    public class hannuota {


    // 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( " %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( " %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 );
    }

    }

    课后作业3:

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

    package text;
    import java.util.*;
    public class huiwen {

    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+"不是回文!");
    }

    }

  • 相关阅读:
    计算机中的二进制运算
    面试题14:剪绳子
    面试题13:机器人的运动范围
    面试题12:矩阵中的路径
    面试题11:旋转数组的最小数字
    面试题10_2:跳台阶
    面试题10:斐波那契数列
    HDU 2202 最大三角形(凸包)
    刚装的系统C盘占空间特别大怎么办?关闭win7的系统还原和调整虚拟内存
    POJ 1113 Wall (凸包)
  • 原文地址:https://www.cnblogs.com/xxdcxy/p/5966046.html
Copyright © 2011-2022 走看看