有一个四分钟的沙漏,一个七分钟的沙漏,怎样测试九分钟的时间

有一个四分钟的沙漏,一个七分钟的沙漏,怎样测试九分钟的时间
 这道题还是挺难想的.
 方法如下:
 1. 将两个沙漏都装满,一起到沙,这个时候4分钟的沙漏已经漏完沙子,将7分钟的沙漏倒过来,这个时候还有3分钟的沙子.  
 2. 将4分钟的沙漏装满沙子,然后和还剩3分钟的沙子的沙漏一起执行,这个时候还剩1分钟.  
 3. 将1分钟的沙子倒入7分钟的沙漏中,这个时候将4分钟的沙漏装满沙子,在一起执行,这个时候开始计时,重复执行4分钟的沙漏两次 (过了8分钟)
 4. 在将7分钟沙漏中的1分钟沙子漏完,需要1分钟,所以总共9分钟.



  
  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
好的,以下是一个基于51单片机和一个点阵的电子沙漏显示沙漏效果的示例代码: ```c #include <reg51.h> // 定义数码管和时钟控制引脚 sbit Dig1 = P2^0; sbit Dig2 = P2^1; sbit Dig3 = P2^2; sbit CLK = P2^3; sbit DIO = P2^4; void delay(unsigned int t) { unsigned int i; while(t--) { for(i = 0; i < 120; i++); } } void writeData(unsigned char dat) { unsigned char i; CLK = 0; for(i = 0; i < 8; i++) { DIO = dat & 0x01; dat >>= 1; CLK = 1; CLK = 0; } } void writeCmd(unsigned char cmd) { unsigned char i; CLK = 0; for(i = 0; i < 8; i++) { DIO = cmd & 0x01; cmd >>= 1; CLK = 1; CLK = 0; } } void init() { writeCmd(0x88); // 打开显示,设置亮度 writeCmd(0x40); // 设置地址模式为固定地址模式 writeCmd(0xC0); // 设置起始地址为0 } void display(unsigned char num) { unsigned char i; writeCmd(0x44); // 设置自动地址加1模式 for(i = 0; i < 8; i++) { if(num & 0x01) { writeData(0xFF); } else { writeData(0x00); } num >>= 1; } } void main() { unsigned char cnt = 32; // 初始时间为32秒 unsigned char i, j; init(); // 初始化点阵显示 while(1) { for(i = 0; i < 8; i++) // 逐行显示沙漏 { for(j = 0; j <= i; j++) { display(1 << j); // 显示第i行的前j列 Dig1 = 1; Dig2 = 0; Dig3 = 0; delay(1); // 显示1ms } for(j = i; j >= 0; j--) { display(1 << j); // 显示第i行的前j列 Dig1 = 1; Dig2 = 0; Dig3 = 0; delay(1); // 显示1ms } } cnt--; // 时间递减 if(cnt == 0) // 时间到了,重新开始 { cnt = 32; } } } ``` 以上代码实现了一个32秒的电子沙漏,使用一个点阵显示沙漏效果,并且支持调整亮度。具体实现方法是:首先初始化点阵显示,然后在死循环中不断地逐行显示沙漏,每次显示1ms,直到时间递减为0,重新开始计时。每行的长度逐渐增加,从1列到8列,然后再逐渐减少,从8列到1列,形成一个沙漏效果。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值