1. 程式人生 > 其它 >演算法很美筆記整理

演算法很美筆記整理

技術標籤:演算法演算法java

來自演算法很美-藍橋學院

一、任意範圍內隨機整數

  • 任意範圍隨機數 Math.random() 隨機返回[0,1)之間的一個double浮點數
  • Math在lang包下 , 因此不必顯示import
  • 公式為a + Math.random() * b
  • Math.random是[0,1) , 乘b-a就是[0,b-a), 再加上a就是[a,b),如果要取等, 就加1
import java.util.Scanner;

public class Hello {
    public static void main(String[] args) {
    

        while
(true){ //a加上Math.random()*(b-a) System.out.println(1 + (int) (Math.random() * (9))); } } }

二、Java中字元運算

  • java中字元運算, char型資料可以轉換成任意一種數值型別, 將整數轉換成char型別時, 只用該資料的低16位, 其餘部分被忽略
  • 要一個浮點值轉換成char型時,首先將浮點值轉換成int型, 然後將這個整數值轉換為char型
  • 還可以自加,自減進行輸出
import java.util.Scanner;

public
class Hello { public static void main(String[] args) { char a = 'a'; System.out.println((char)0X0041); System.out.println((char)0XAB0041); System.out.println(++a); } }
執行結果如下:
A
A
b

  • 當一個char型資料轉換成數值型時, 這個字元的Unicode碼就被轉換成某個特定的數值
import java.util.Scanner;
public class Hello { public static void main(String[] args) { System.out.println((int)'A'); } }
  • 0~FFFF的任何一個十六進位制正整數都可以隱式轉換成字元型, 而不再次範圍內的任何其他數值都必須顯示轉換
import java.util.Scanner;

public class Hello {
    public static void main(String[] args) {
        char ch = '\u0041'; //也可以這樣
        char ch1 = 65;
        char ch2 = 0X0041;
        System.out.println((int)ch);
        System.out.println((int)ch2);
        }
    }

如果與數值型別資料進行運算,就會先轉換成數數值型別進行計算,如果和字串進行計算,會被轉換成字串

三、猜生日

這個是運用了二進位制的技巧,因為生日只有0-31天,那麼可以進行五次詢問(具體看下面程式碼),將五個二進位制位置的0或1全部列舉清楚,然後等知道了這五個位置是0/1後,就知道了響應的數字

import java.util.Scanner;

public class Hello {
    public static void main(String[] args) {
        //猜生日
        Scanner sc = new Scanner(System.in);
        String s1 =
                "1 3 5 7\n" +
                "9 11 13 15\n" +
                "17 19 21 23\n" +
                "25 27 29 31\n";
        String s2 =
                "2 3 6 7\n" +
                "10 11 14 15\n" +
                "18 19 22 23\n" +
                "26 27 30 31\n";
        String s3 =
                "4 5 6 7\n" +
                "12 13 14 15\n" +
                "20 21 22 23\n" +
                "28 29 30 31\n";
        String s4 =
                 "8 9 10 11\n" +
                 "12 13 14 15\n" +
                 "24 25 26 27\n" +
                 "28 29 30 31\n";
        String s5 =
                "16 17 18 19\n" +
                "20 21 22 23\n" +
                "24 25 26 27\n" +
                "28 29 30 31\n";
        int a, a1, a2, a3, a4, a5;
        System.out.println("你的生日在這些數字裡面嗎?是輸入1,否則輸入0\n"+s1);
        a1 = sc.nextInt();
        System.out.println("你的生日在這些數字裡面嗎?是輸入1,否則輸入0\n"+s2);
        a2 = sc.nextInt();
        System.out.println("你的生日在這些數字裡面嗎?是輸入1,否則輸入0\n"+s3);
        a3 = sc.nextInt();
        System.out.println("你的生日在這些數字裡面嗎?是輸入1,否則輸入0\n"+s4);
        a4 = sc.nextInt();
        System.out.println("你的生日在這些數字裡面嗎?是輸入1,否則輸入0\n"+s5);
        a5 = sc.nextInt();
        int b = 2*2*2*2*a5 + 2*2*2*a4 + 2*2*a3 + 2*a4 + a5;
        System.out.println("你的生日是:"+b);
        }
    }