zoukankan      html  css  js  c++  java
  • Java学习心得之各种小算法

    1、计算两个日期差多少天的方法,代码如下

     1 /**
     2 * 这个方法可以比较两个日期的相差天数。先输入小的日期
     3 */
     4 private static void DateCha() {
     5     Scanner datein = new Scanner(System.in);
     6     Scanner input1 = new Scanner(datein.nextLine()).useDelimiter("-");
     7     Scanner input2 = new Scanner(datein.nextLine()).useDelimiter("-");
     8     Calendar cal1 = Calendar.getInstance(), cal2 = Calendar.getInstance();
     9 
    10     cal1.set(input1.nextInt(), input1.nextInt(), input1.nextInt());
    11     cal2.set(input2.nextInt(), input2.nextInt(), input2.nextInt());
    12 
    13     for (int i = 0; ; i++) {
    14         cal1.add(Calendar.DATE, i);
    15         if (cal1.equals(cal2))
    16             System.out.println("差天数" + i);
    17         else
    18             cal1.add(Calendar.DATE, -i);
    19         }
    20     datein.close();
    21     input1.close();
    22     input2.close();
    23 }

    输入的是1990-07-282013-09-13

    2、求两个整数的最大公约数的算法,如下

    1 static int gcd(int M, int N) {
    2     if (N == 0)
    3         return M;
    4     return gcd(N, M % N);
    5 }

     3、约瑟夫问题的Java求解,代码如下,其中对于指针的应用非常好,代码值得推敲

     1 /**
     2  * 约瑟夫问题,指针的用法
     3  */
     4 public class Josephus {
     5     static class Node{
     6         int val;    Node next;
     7         Node(int v){
     8             val=v;
     9         }
    10     }
    11     public static void main(String[] args) {
    12         Scanner sc=new Scanner(System.in);
    13         int M=sc.nextInt();        //总共有多少人
    14         int N=sc.nextInt();        //第几个人出去
    15         Node t=new Node(1);        //首节点
    16         Node x=t;                //定义一个指针,这个指针也是指向t的,是为了增加节点而设置的
    17         for(int i=2;i<=N;i++)
    18             x=(x.next=new Node(i));        //其中第一次循环x.next就是t的下一个节点,创建一个新的结点
    19                                         //然后把x指针下移
    20         x.next=t;                        //把尾指针赋值给头指针
    21         while(x!=x.next){
    22             for(int i=1;i<M;i++)
    23                 x=x.next;
    24             x.next=x.next.next;
    25         }
    26         System.out.println("survivor is "+x.val);
    27     }
    28 
    29 }
  • 相关阅读:
    C++ 类 析构函数
    Oracle 11g rac 添加新节点测试
    rac添加新节点的步骤与方法
    X 传输表空间方法留待整理
    1913: 成绩评估
    1066: 输入n个数和输出调整后的n个数
    1005: 渊子赛马
    Problem Y: 哪一天,哪一秒?
    Problem T: 结构体学生信息排序
    Problem O: 国家排序
  • 原文地址:https://www.cnblogs.com/Lowp/p/2676021.html
Copyright © 2011-2022 走看看