努力刷題,每日三題,題目來源于《Java課后實戰訓練手冊》----清華大學出版社,
第一題
把A地設為坐標原點,B地的坐標為(3.8,4.2),C地的坐標為(3.2,4.5),在不計算出結果的前提下,使用Math.min()方法輸出B、C哪一個地點距A地更近,
public class CloserPlace {
public static void main(String[] args) {
double BToA = Math.sqrt(Math.pow(3.8, 2) + Math.pow(4.2, 2));
double CToA = Math.sqrt(Math.pow(3.2, 2) + Math.pow(4.5, 2));
double result = Math.min(BToA, CToA);
if (BToA == result)
System.out.println("B點距離A點更近");
if (CToA == result)
System.out.println("C點距離A點更近");
}
}
第二題
使用Random類模擬微信的搶紅包功能,根據用戶輸入的紅包額度和個數隨機生成每個紅包的金額,效果圖如下圖所示,

//標答參考代碼
import java.util.Random;
import java.util.Scanner;
public class RedBags { // 創建一個RedBags類
public static void main(String[] args) {
System.out.println("—————————模擬微信搶紅包—————————\n");
Scanner sc = new Scanner(System.in); // 控制臺輸入
System.out.print("請輸入要裝入紅包的總金額(元):");
double total = sc.nextDouble(); // 輸入“紅包的總金額”
System.out.print("請輸入紅包的個數(個):");
int bagsnum = sc.nextInt(); // 輸入“紅包的個數”
double min = 0.01; // 初始化“紅包的最小金額”
Random random = new Random(); // 創建亂數物件random
if (total / bagsnum == 0.01) { // 紅包總金額與個數的商為0.01時
for (int i = 1; i < bagsnum; i++) {
double money = min; // 讓每個包中的金額均為最小金額0.01
total -= money; // 紅包中的剩余金額
System.out.println
("第" + i + "個紅包:" + String.format("%.2f", money) + "元");
}
} else if (total / bagsnum < 0.01) { // 紅包總金額與個數的商小于0.01時
System.out.println("要保證每個人都能分到1分錢哦!");
return; // 不再執行第22行以下的代碼,例如第46行
} else {
for (int i = 1; i < bagsnum; i++) { // 設定“回圈”
/*
* 本次紅包可用最大金額 =
* 可分配金額 - (紅包總數 * 已發出的紅包數) * 紅包的最小金額
*/
double max = total - (bagsnum - i) * min;
double bound = max - min; // 設定隨機金額的取值范圍
/*
* 據隨機金額的取值范圍,隨機生成紅包金額, 由于nextInt(int
* bound)只能用整型做引數,所以先將bound乘100(小數點向右挪兩位)
* 獲取到一個整數后,將這個整數除100(小數點向左挪兩位)
* 并轉換成與金額相同的浮點型別
*/
double safe = (double) random.nextInt((int) (bound * 100)) / 100;
double money = safe + min; // 最后加上紅包的最小金額,以防safe出現0值
total = total - money; // 替換total的值
System.out.println
("第" + i + "個紅包:" + String.format("%.2f", money) + "元");
}
}
// 輸出剩余金額
System.out.println
("第" + bagsnum + "個紅包:" + String.format("%.2f", total) + "元");
sc.close(); // 關閉控制臺輸入
}
}
第三題
七星彩是指從0000000-9999999中選擇任意7位自然號碼進行投注,每注2元RMB,使用Random類模擬根據用戶控制臺輸入的“購買的彩票數”,隨機為用戶生成相應數目的七星彩號碼,并與當期的七星彩結果比較,最后輸出中獎情況,效果圖如下圖所示,

//標答參考答案
import java.util.Random;
import java.util.Scanner;
public class SevenColors { // 創建一個SevenColors類
public static void main(String[] args) {
Scanner sc = new Scanner(System.in); // 控制臺輸入
System.out.print("請輸入您要購買的彩票數:"); // 提示資訊
int counts = sc.nextInt(); // 輸入“購買的彩票數”
Random rnd = new Random(); // 創建隨機號碼物件r
int nums[] = new int[counts]; // 宣告一個int型別“購買彩票”的陣列,用來存放購買的彩票號碼
System.out.println("您購買的彩票號碼如下:"); // 提示資訊
for (int i = 0; i < counts; i++) { // 遍歷“購買彩票”的陣列
int randNum = rnd.nextInt(8999999) + 1000000; // 7位彩票號碼,范圍是1000000~9999999
System.out.println(randNum); // 輸出隨機生成的彩票號碼
nums[i] = randNum;// 把隨機生成的彩票號碼插入“購買彩票”的陣列
}
int useMoney = nums.length * 2;// 購買彩票花費的金額
System.out.println("您購買彩票的號碼量:" + counts + "張,共消費:" + useMoney + "元,");// 輸出結果
int getMoney = 0; // 初始化“中獎金額”
int bonus = rnd.nextInt(8999999) + 1000000; // 7位“開獎號碼”,范圍是1000000~9999999
System.out.println("本期開獎號 : " + bonus);
String rightNum = Integer.toString(bonus); // 型別轉換
for (int l = 0; l < nums.length; l++) { // 遍歷由購買彩票組成的陣列
String myNum = Integer.toString(nums[l]); // 彩票號碼
int series = 0; // 初始化中“我的號碼”跟開獎號一樣的連續號碼的組數
int arr[] = new int[7]; // 宣告一個int型別的陣列,用來存放跟開獎號一樣的連續號碼的組數
for (int m = 0; m < 7; m++) {// 7位號碼
String everyNum = myNum.substring(m, m + 1); // 分別截取“我的號碼”每一位上的字串
String everyRightNum = rightNum.substring(m, m + 1); // 分別截取“開獎號”每一位上的字串
if (everyNum.equals(everyRightNum)) { // 判斷“我的號碼”跟“開獎號”每位上的號碼字是否相同
series++; // 條件成立時,統計“我的號碼”跟開獎號一樣的連續號碼的組數
} else { // 條件不成立時
if (series > 0) {// 如果有中獎的號碼
arr[series - 1] = series;// 把中獎的號碼插入號碼組
series = 0;// 初始化中“我的號碼”跟開獎號一樣的連續號碼的組數
}
}
}
// 求最大的連續號碼的組數
for (int i = 0; i < arr.length; i++) {
if (series < arr[i]) {
series = arr[i];
}
}
if (series > 1) { // 連續號碼的組數大于1
switch (series) { // 多分支陳述句
case 2:
System.out.println("您贏得了5元!");
getMoney += 5; // 六等獎5元
break;
case 3:
System.out.println("您贏得了20元!");
getMoney += 20; // 五等獎20元
break;
case 4:
System.out.println("您贏得了300元!");
getMoney += 300; // 四等獎300元
break;
case 5:
System.out.println("您贏得了1800元!");
getMoney += 1800; // 三等獎1800元
break;
case 6:
System.out.println("您贏得了20000元!");
getMoney += 20000; // 二等獎20000元
break;
case 7:
System.out.println("您贏得了5000000元!");
getMoney += 5000000; // 一等獎5000000元
break;
}
}
}
System.out.println("您中獎的總金額:" + getMoney + "元,"); // 總獎金
sc.close(); // 關閉控制臺輸入
}
}
后兩個題沒有想法,把標答附在這里了,如果大家有更好的想法歡迎留言,
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/303580.html
標籤:java
上一篇:cgb2108-day02
