刷题的狂欢-----JAVA每日三练-----第十二天

努力刷题,每日三题,题目来源于《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(); // 关闭控制台输入
	}
}

后两个题没有想法,把标答附在这里了,如果大家有更好的想法欢迎留言。

  • 33
    点赞
  • 52
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 31
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 31
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

敲代码的xiaolang

你的鼓励是我最大的动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值