每日作业20200416 - 灯的开关问题

探讨了灯泡在多次开关操作后的状态,以及引入随机因素模拟灯泡烧坏概率的两种编程实现方式。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

题目

晚上小明在灯下做作业的时候,突然停电,小明去拉了两下开关。
妈妈回来后,到小明房间又拉了三下开关。
等来电后,小明房间的灯( ??)亮 / 不亮

分析

问题包含两个重要参数:
   灯开关的状态(亮true; 不亮false);
   开关灯的动作(用 int i 记录次数);
过程
   灯下做作业:亮(初始 i=0)
   停电
   拉两下开关:不亮(i=1)–>亮(i=2)
   拉三下开关:不亮(i=3)–>亮(i=4)–>不亮(i=5)
综上
   灯初始为亮;
   拨动5次开关;
   结果不亮;
   i 为奇数表示不亮,偶数表示亮


方法1 - 代码

public class Homework0416 {
	public static void main(String[] args) {
		//声明并初始化
		int i = 0;  //记录开关动作,此时为亮
		int N = 5;	//总开关次数
		System.out.println("停电前,小明的灯:亮");
		for(i = 1; i <= N; i++) {
			//判断并输出,奇数灯不亮;偶数灯亮
			System.out.println("第" + i + "次拉开关,灯:" + (i % 2 == 0 ? "亮" : "不亮"));   
		}
		System.out.println("等来电后,小明房间的灯:" + ((i - 1) % 2 == 0 ? "亮" : "不亮"));
	}
}

方法1 - 运行结果

停电前,小明的灯:亮
第1次拉开关,灯:不亮
第2次拉开关,灯:亮
第3次拉开关,灯:不亮
第4次拉开关,灯:亮
第5次拉开关,灯:不亮
等来电后,小明房间的灯:不亮

方法2 - 代码
加入了随机数,用来模拟每次开关动作时,灯泡烧坏的概率

//整个思路:灯寿命大于0---->进行开、关动作---->进行开关动作的时候,判断是否有烧坏的可能

import java.util.Random;

public class Light02 {
/*主方法入口*/
	public static void main(String[] args) {
		//声明并初始化
		int i = 0;  //记录开关动作,此时为亮
		int N = 5;	//总开关次数
		System.out.println("停电前,小明的灯:亮");
		light(i,N);		//调用light方法
	}

/*定义名为light的方法*/
	public static void light(int i, int N) {
		Random random = new Random();		//创建随机数对象
		int life = random.nextInt(100);		//声明定义灯泡的剩余寿命
		System.out.println("灯泡剩余寿命为" + life + "h");

		if( life > 0){			//灯泡寿命大于0
			move(i , N);		//调用move方法
		}else{					//灯泡寿命小于0
			System.out.println("灯泡已坏,请更换灯泡!");
			System.out.println("等来电后,小明房间的灯:不亮。(灯泡寿终正寝)");
		}
	}

/*定义名为move的方法,表示开关动作*/
	public static void move(int i , int N) {
		Random random = new Random();		//创建随机数对象
		for(i = 1; i <= N; i++) {
			int p = random.nextInt(100);	//定义每次进行开关动作时,灯泡烧坏的概率,p大于等于30,则表示没有烧坏
			boolean b = probability( i, p);
			if(b == true){
				continue;
			}else{
				break;
			}
		}
		
		if (i == N + 1)		//若 i = 6,表示for循环执行完;若 i != 6,表示烧坏
		{
			System.out.println("等来电后,小明房间的灯:" + (( i - 1) % 2 == 0 ? "亮" : "不亮。(处于关灯状态)"));
		}else{
		System.out.println("等来电后,小明房间的灯:不亮。(灯泡烧坏)");
		}
	}
	
/*定义名为probability的方法,表示烧坏概率*/
	public static boolean probability(int i , int p) {
		if( p >= 30){			//判断,产生的随机数大于等于30,则表示没有烧坏
			System.out.println("第" + i + "次拉开关,灯:" + ( i % 2 == 0 ? "亮" : "不亮") );		//判断并输出,奇数灯不亮;偶数灯亮
			return true;		//没有烧坏,返回true
		}
		else{		//判断,产生的随机数小于等于30,则表示烧坏
			System.out.println("灯泡烧坏,请更换灯泡!");
			return false;		//烧坏,返回false
		}
	}

}

方法2 - 运行结果

------------------------------------------------------------------------------------------
停电前,小明的灯:亮
灯泡剩余寿命为32h
第1次拉开关,灯:不亮
第2次拉开关,灯:亮
灯泡烧坏,请更换灯泡!
等来电后,小明房间的灯:不亮。(灯泡烧坏)
------------------------------------------------------------------------------------------
停电前,小明的灯:亮
灯泡剩余寿命为80h
灯泡烧坏,请更换灯泡!
等来电后,小明房间的灯:不亮。(灯泡烧坏)
------------------------------------------------------------------------------------------
停电前,小明的灯:亮
灯泡剩余寿命为8h
第1次拉开关,灯:不亮
第2次拉开关,灯:亮
第3次拉开关,灯:不亮
第4次拉开关,灯:亮
第5次拉开关,灯:不亮
等来电后,小明房间的灯:不亮。(处于关灯状态)
------------------------------------------------------------------------------------------

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值