大笨钟

这段代码是一个简单的C++程序,用于读取24小时制的时间(小时和分钟),如果时间在12点之前,它会输出'太早了,还不到当当的时间'。程序通过for循环和条件判断实现功能,适合初学者理解时间处理和条件控制语句。

题源

团体程序设计天梯赛

题解

#include<iostream>
using namespace std;
int hh,mm;
int main(){
    scanf("%d:%d",&hh,&mm);
    if(0<=hh&&hh<=12){
        printf("Only %02d:%02d.  Too early to Dang.",hh,mm);
        return 0;
    }
    for(int i=0;i<hh-12;i++)cout << "Dang";
    if(mm!=0)cout << "Dang";
    return 0;
}
### 题目解析 PTA题目围绕一个自称“V”的角色展开,该角色每天敲提醒码农早点休息,但敲时间不固定。敲点数与敲时间相关:若在整点敲,“当”数等于整点数;若过了整点,则敲下一个整点数。一天24小时内,只在后半天敲1 - 12下,在午夜00:00到中午12:00期间(包含端点)不敲。题目要求编写程序,根据输入的当前时间(格式为 hh:mm,其中 hh 为 00 - 23 的小时数,mm 为 00 - 59 的分数)替,输出相应数量的 “Dang”;若不在敲时间,则输出 “Only hh:mm. Too early to Dang” [^1][^2]。 ### 解决方案 #### 方案一 ```c #include <stdio.h> int main() { int h, m, i; scanf("%d:%d", &h, &m); if (h > 12) { if (m > 0) { for (i = 1; i <= h - 11; i++) printf("Dang"); } else { for (i = 1; i <= h - 12; i++) printf("Dang"); } } else if (h == 12) { if (m == 0) { printf("Only %02d:%02d. Too early to Dang.", h, m); } else printf("Dang"); } else printf("Only %02d:%02d. Too early to Dang.", h, m); return 0; } ``` 此方案先读取输入的时间,然后根据小时和分的情况进行判断。若小时于12,根据分是否为0确定敲次数;若小时等于12,再根据分是否为0判断是否敲;若小时小于12,则输出未到敲时间的提示 [^2]。 #### 方案二 ```c #include <stdio.h> int main() { int h, m; scanf("%d:%d", &h, &m); if (h < 12) { printf("Only %02d:%02d. Too early to Dang.\n", h, m); } else if ((h == 12) && (m == 0)) { printf("Only %02d:%02d. Too early to Dang.\n", h, m); } else { int i = 0; if (m == 0) { for (i; i < h - 12; i++) { printf("Dang"); } } else { for (i; i < h - 11; i++) { printf("Dang"); } } } return 0; } ``` 该方案同样先读取时间,通过判断小时和分的不同情况,确定是否到敲时间以及敲的次数 [^3]。 #### 方案三 ```c #include <stdio.h> int main() { int a, b, c; scanf("%2d:%2d", &a, &b); if (a <= 12) { printf("Only %02d:%02d. Too early to Dang.", a, b); } else { if (b >= 1) c = a - 12 + 1; else c = a - 12; for (int i = 0; i < c; i++) printf("Dang"); } } ``` 此方案读取时间后,根据小时是否小于等于12判断是否到敲时间,若到敲时间,再根据分是否于等于1确定敲次数 [^4]。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值