演算法很美筆記整理
阿新 • • 發佈:2021-01-16
來自演算法很美-藍橋學院
一、任意範圍內隨機整數
- 任意範圍隨機數 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);
}
}