杭电OJ 1995、1996、1108、2138、1722、2504题

安卓开发及安全交流QQ群:838650234,感兴趣的可以加群。

1995题:

import java.util.*;
public class Main {
    public static int counting = 0;

    public static void main(String[] args) {
        Scanner sc_01 = new Scanner(System.in);
        int line_num = sc_01.nextInt();
        for(int i = 0;i<line_num;i++){
            int all_plate = sc_01.nextInt();
            int point_plate = sc_01.nextInt();
            Stack<Integer> a_pillar = new Stack<Integer>();
            Stack<Integer> b_pillar = new Stack<Integer>();
            Stack<Integer> c_pillar = new Stack<Integer>();
            for(int j=all_plate;j>0;j--){
                a_pillar.push(j);
            }
            //从a移动到c,以b为辅助。
            move(all_plate,a_pillar,b_pillar,c_pillar,point_plate);
            System.out.println(counting);
        }
    }
    //但时间复杂度太大,递归本来就大,故而寻找其中规律。
    private static void move(int all_plate, Stack<Integer> a_pillar, Stack<Integer> b_pillar, Stack<Integer> c_pillar,int point_plate) {
       if(all_plate == 0 ) return;
       move(all_plate-1,a_pillar,c_pillar,b_pillar,point_plate);
       int move_num = a_pillar.pop();
       if(move_num == point_plate){
           counting++;
       }
       c_pillar.push(move_num);
       move(all_plate-1,b_pillar,a_pillar,c_pillar,point_plate);
    }
}

1996题:

import java.util.*;
public class Main {

    public static void main(String[] args) {
        Scanner sc_01 = new Scanner(System.in);
        int line_num=sc_01.nextInt();
        for(int i = 0;i< line_num;i++){
            int test_num = sc_01.nextInt();
            double result = Math.pow(3,test_num);
            System.out.println((long) result);
        }
    }
}

1108题:

import java.util.*;

public class Main {

    public static void main(String[] args) {
        Scanner sc_01 = new Scanner(System.in);
        while (sc_01.hasNext()) {
            int num_01 = sc_01.nextInt();
            int num_02 = sc_01.nextInt();
            int tmp = 0;
            if (num_01 < num_02) {
                tmp = num_01;
                num_01 = num_02;
                num_02 = tmp;
            }
            int Gre_Div = greatest_divisor(num_01, num_02);
            int lea_mul = num_01 /Gre_Div*num_02/Gre_Div * Gre_Div;
            System.out.println(lea_mul);
        }
    }
    //利用辗转相除法。
    private static int greatest_divisor(int num_01, int num_02) {
        int tmp = 0;
        while (num_01 % num_02 != 0) {
            tmp = num_02;
            num_02 = num_01 % num_02;
            num_01 = tmp;
        }
        return num_02;
    }
}

2138题:

import java.util.*;

public class Main {

    public static void main(String[] args) {
        Scanner sc_01 = new Scanner(System.in);
        //有了惯性思维,以为不用判断hasNext,一切皆有可能。
        while (sc_01.hasNext()) {
            long num_mon = sc_01.nextLong();
            ArrayList<Integer> arrayList_01 = new ArrayList<Integer>();
            for (long i = 0; i < num_mon; i++) {
                int tmp = sc_01.nextInt();
                arrayList_01.add(tmp);
            }
            boolean result = false;
            long counting = 0;
            for (long i = 0; i < num_mon; i++) {
                result = check_Prime_number(arrayList_01.get((int) i));
                if (result) counting++;
            }
            System.out.println(counting);
        }
    }

    //存在时间复杂度过高的问题。三中优化方法:(1)num/2+1;(2)sqrt(num)+1;(3)去掉整数;(4)艾拉拖死筛选法
    private static boolean check_Prime_number(int num) {
        for (long i = 2; i <= Math.sqrt(num); i++) {
            if (num % i == 0) return false;
        }
        return true;
    }
}

1722题:

import java.util.*;
public class Main {

    public static void main(String[] args) {
        Scanner sc_01 = new Scanner(System.in);
        while (sc_01.hasNext()){
           int num_01 = sc_01.nextInt();
           int num_02 = sc_01.nextInt();
           int tmp = 0;
           //将较小的数放在第一个。
           if(num_01 > num_02){
               tmp = num_01;
               num_01 = num_02;
               num_02 = tmp;
           }

           if(num_01 != num_02){
               //若是不相等
               //注意一定是首尾相连的形状情况,因为有两刀是重合的,以题目4,6为例,所以按照图中的标记全部切割是4+6-2,
               // 2是重合的切割标记数量,数学意义上是4,6的最大公约数,这样如果4人,则1+8 2+3 4+5 6+7,如果6人,
               // 则1+2 3+4 5+6.......(可以以圆心角的度数来理解)
               int Gre_Div = greatest_divisor(num_01, num_02);
               System.out.println((num_02 + num_01)-Gre_Div);

           }else{
               //如果两个数相等,就不用进行判断了。
               System.out.println(num_01);
           }
        }
    }
    //利用辗转相除法。
    private static int greatest_divisor(int num_01, int num_02) {
        int tmp = 0;
        while (num_01 % num_02 != 0) {
            tmp = num_02;
            num_02 = num_01 % num_02;
            num_01 = tmp;
        }
        return num_02;
    }
}

2504题:

import java.util.*;

public class Main {

    public static void main(String[] args) {
        Scanner sc_01 = new Scanner(System.in);
        int line_num = sc_01.nextInt();
        for (int i = 0; i < line_num; i++) {
            int num_01 = sc_01.nextInt();
            int GCD_01 = sc_01.nextInt();
            int num_02 = 0;
            if(num_01 / GCD_01 == 1){
                num_02 = GCD_01 * 2;
                System.out.println(num_02);
            }else{
                int division_01 = num_01 / GCD_01;
                int division_02 =2;
                //对其进行判断。若是两个数除1以外的公约数,则return false,否则return true;
                while (!checkGCD(division_01,division_02)){
                    division_02++;
                }
                System.out.println(division_02 *GCD_01);
            }
        }
    }

    private static boolean checkGCD(int division_01, int division_02) {
        int tmp = 0;
        //调换次序。大数放在前面.
        if(division_01 < division_02){
            tmp = division_01;
            division_01 = division_02;
            division_02 = tmp;
        }
        while (division_01 % division_02 != 0 ){
            tmp = division_02;
            division_02 = division_01 %division_02;
            division_01 = tmp;
        }
        if(division_02 == 1){
            return true;
        }else{
            return false;
        }
    }
}

猜你喜欢

转载自blog.csdn.net/weixin_38244174/article/details/82502894
今日推荐