林若音 2023-05-27 20:15 采纳率: 50%
浏览 105
已结题

C语言红绿灯时间问题

img

红绿灯先变绿a秒,再变红b秒,然后再变绿a秒,变红b秒,不断循环,小Q在红绿灯刚刚变绿的时候开始观察,持续了c秒
请求出在这c秒中有多少时间红绿灯是绿的

  • 写回答

6条回答 默认 最新

  • 关注
    
    #include <stdio.h>
    
    int main() {
        int a, b, c;
        scanf("%d %d %d", &a, &b, &c); // 读取 a、b、c 参数
        int cycle = a + b; // 红绿灯一个循环的总时间
        int green = 0; // 红绿灯绿色显示的总时间
        int t = c; // 计时器
        while (t > 0) {
            if (t >= a) { // 如果剩余的时间大于绿灯时间 a,那么绿灯全部亮起
                green += a;
                t -= a;
            } else { // 否则只有剩余的时间全部是绿灯时间
                green += t;
                t = 0;
            }
            if (t >= b) { // 如果剩余的时间大于红灯时间 b,那么红灯全部亮起
                t -= b;
            } else { // 否则只有剩余的时间全部是红灯时间
                t = 0;
            }
        }
        printf("%d\n", green); // 输出绿灯的总时间
        return 0;
    }
    

    上面这段代码中,我们首先通过 scanf 函数读取三个参数 a、b 和 c,然后计算出一个完整的红绿灯循环的时间 cycle。
     
    接着,我们对于每个循环,分别判断剩余时间是否大于绿灯时间 a,如果大于则绿灯全部亮起,绿灯时间加上 a,计时器减去 a;否则只有剩余时间全部是绿灯时间。
     
    然后我们再判断剩余的时间是否大于红灯时间 b,如果大于则红灯全部亮起,红灯时间为 b,计时器再减去 b。因为 c 不一定是一个完整的循环时间,因此我们需要循环判断,直到剩余时间不够执行下一个循环。最终,我们输出绿灯的总时间即可。

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(5条)

报告相同问题?

问题事件

  • 系统已结题 6月5日
  • 已采纳回答 5月28日
  • 创建了问题 5月27日

悬赏问题

  • ¥15 在win10下使用指纹登录时,界面上的文字最后一个字产生换行现象
  • ¥15 flutter 编译web端出错,如何解决?
  • ¥20 使用AT89C51微控制器和MAX7219驱动器来实现0到99秒的秒表计数,有开始和暂停以及复位功能,请写出C语言程序
  • ¥15 51单片机 双路ad同步采样
  • ¥15 使用xdocreport 生成word
  • ¥15 请教怎么用MATLAB求坐标
  • ¥15 gradle整合es,在创建索引时报错
  • ¥15 关于模型训练的一个问题
  • ¥15 装了几千台服务器从来没遇到这种问题,哎看下哪位帮我解决吧
  • ¥15 单片机程序上的困难问题