7-15 然后是几点

有时候人们用四位数字表示一个时间,比如 1106 表示 11 点零 6 分。现在,你的程序要根据起始时间和流逝的时间计算出终止时间。

读入两个数字,第一个数字以这样的四位数字表示当前时间,第二个数字表示分钟数,计算当前时间经过那么多分钟后是几点,结果也表示为四位数字。当小时为个位数时,没有前导的零,例如 5 点 30 分表示为 530;0 点 30 分表示为 030。注意,第二个数字表示的分钟数可能超过 60,也可能是负数。

输入格式:

输入在一行中给出 2 个整数,分别是四位数字表示的起始时间、以及流逝的分钟数,其间以空格分隔。注意:在起始时间中,当小时为个位数时,没有前导的零,即 5 点 30 分表示为 530;0 点 30 分表示为 030。流逝的分钟数可能超过 60,也可能是负数。

输出格式:

输出不多于四位数字表示的终止时间,当小时为个位数时,没有前导的零。题目保证起始时间和终止时间在同一天内。

输入样例:

1120 110

输出样例:

1310

鸣谢燕山大学穆运峰老师、用户任钰补充数据!

代码长度限制

16 KB

时间限制

400 ms

内存限制

64 MB

我的答案:
一、信息

1.用四位数表示时间

2.根据起始时间和流逝时间计算出终止时间

3.输入规则:第一个数是四位数表示时间,第二个数用分钟表示时间

4.小时数个位没有前导0

5.第二个数字可能分钟数超过六十且有可能为负数

二、分析

问题1:如何用四位数表示时间

我的答案:直接用int型表示就可以了

问题2:如何实现根据起始时间和流逝时间计算出终止时间

我的答案:

由于分钟和小时的模不一样所以我们把问题分解成两部分即小时部分和分钟部分。

小时进位:输出不多于四位数字表示的终止时间,当小时为个位数时,没有前导的零。题目保证起始时间和终止时间在同一天内。

这里错了——如果大于23那么就-24在同一天

第一部分为小时 第二部分为分钟
首先对分钟数进行除60,因为1h=60min且,数据是整型会导致精度丢失所以通过这个就能算出这个分钟占了多少小时这样把算出的小时和初始相加这样就得到了,然后考虑分钟问题这里我们通过对60取余就可以得到剩余的不满一小时的分钟数然后和分钟部分相加,这里就会出现两种情况

分钟进位

第一种是不进位

不进位那么我们就直接相加即可

第二种是进位

那么我们相加后先判断它是否大于60如果大于小时部分加1然后直接加在一起然后再减60.

我的错误答案:

#include<stdio.h>
int main(){
	int now,time,after,timehour,timeminute,nowhour,nowminute,afterhour,afterminute;
	scanf("%d %d",&now,&time);
	nowhour=now/60;
	nowminute=now%60;
	timehour=time/60;
	timeminute=time%60;
	afterhour=nowhour+timehour;
	afterminute=nowminute+timeminute;
	if(afterminute>60){
		afterminute=afterminute-60;
	}
	after=afterhour*100+afterminute;
	printf("%d",after);
} 

运行结果:

错误原因:

我的程序存在以下几个问题:

  1. 错误的时间单位
    我把小时当做了60分钟,这是错误的。小时应该用100来分割,因为输入的四位数时间表示中,前两位是小时,后两位是分钟。

  2. 分钟处理不全面
    如果afterminute超过60,我只减去了60。但考虑到流逝时间可以超过60分钟(例如120分钟、180分钟等),所以这样处理是不够的。你还需要处理afterminute的进位。

  3. 没有处理小时的进位
    如果afterhour超过24,需要循环到0-23之间。

  4. 没有处理负数情况
    据题意,流逝时间可以是负数,所以你需要处理这种情况。

考虑上述问题,我将修改我的程序:

C语言:

#include<stdio.h>
int main(){
    int now, time, after, timehour, timeminute, nowhour, nowminute, afterhour, afterminute;
    scanf("%d %d", &now, &time);
    
    nowhour = now / 100;      // 修改为100,用于提取小时
    nowminute = now % 100;    // 修改为100,用于提取分钟
    
    timehour = time / 60;     // 时间的小时部分由分钟转化而来
    timeminute = time % 60;
    
    afterhour = nowhour + timehour;
    afterminute = nowminute + timeminute;
    
    // 更完善的分钟处理
    while(afterminute >= 60) {
        afterhour++;
        afterminute -= 60;
    }
    while(afterminute < 0) {
        afterhour--;
        afterminute += 60;
    }
    
    // 处理小时的进位
    afterhour %= 24;
    
    after = afterhour * 100 + afterminute;
    printf("%d", after);
    return 0;
}

 C++:
 

#include <iostream>
using namespace std;

int main() {
    int start, elapsed;
    cin >> start >> elapsed;

    int hours = start / 100;
    int minutes = start % 100;

    // Add elapsed minutes to the current time
    minutes += elapsed;

    // Process the carry for minutes
    while (minutes >= 60) {
        hours++;
        minutes -= 60;
    }
    while (minutes < 0) {
        hours--;
        minutes += 60;
    }

    // Process the carry for hours
    hours %= 24;

    cout << hours;
    if (minutes < 10) {
        cout << "0";
    }
    cout << minutes << endl;
    return 0;
}

总结:

反思:

1. **错误的时间单位**:  
   - 我使用了`60`作为小时和分钟之间的分隔。这是不正确的,应该使用`100`来分隔。例如,`1120`表示`11`小时`20`分钟,而不是`18`小时`40`分钟。

   处理方案:仔细阅读和理解题目要求。确保正确理解了输入和输出格式。

2. **没有处理时间的循环性**:  
   - 如果`afterminute`超过`60`,我只减去了`60`。但是,可能存在多个小时的增加,因此需要循环处理。
   - 没有处理小时数超过`24`的情况。

   **建议**处理方案:考虑所有可能的边界情况。在时间问题中,经常需要处理时间的循环性。

3. **错误的时间进位**:  
   - 当分钟数超过60时,小时数应该加1。

   处理方案:确保逻辑和算法是正确的,注意进位和借位的情况。

4. **冗余的变量**:
   - 我定义了`timehour`和`timeminute`,但在时间问题上,我们不需要把流逝的时间转化为小时和分钟,因为我们可以直接添加或减去分钟。

  处理方案:减少不必要的变量和计算,简化代码。

5. **没有考虑负的流逝时间**:  
   - 根据题目描述,流逝的时间可以是负数,但我的代码没有处理这种情况。

   处理方案:总是检查题目是否有特殊或边界情况,并确保代码处理了这些情况。

综上所述,我的代码需要一些重要的修改才能解决这个问题。确保我深入理解题目的需求,并思考所有可能的输入情况。

背后缺失的能力:

1. **细致的阅读能力**:
    - 我可能没有仔细阅读或完全理解题目的要求,导致对小时和分钟的处理存在误解。
   
    **提高方法**: 
    - 当我遇到问题描述时,多次阅读并尝试总结关键信息。
    - 练习时,可以尝试做题后自己写题目的简化版本,看是否能准确捕捉关键点。

2. **逻辑思维与分析能力**:
    - 我在处理时间进位的逻辑上出现了漏洞,如分钟超过60只减去了60,没有处理小时的增加。
   
    **提高方法**:
    - 经常练习逻辑题和算法题,特别是那些需要深入思考和多步骤解答的题目。
    - 分析已有的解决方案,尝试理解其背后的逻辑,并自己手动模拟算法的执行过程。

3. **测试与验证能力**:
    - 根据我给出的代码,可能没有进行充分的测试,尤其是边界情况。
    
    **提高方法**:
    - 编写代码后,总是使用多种测试用例进行测试,包括常规情况、边界情况和可能的异常情况。
    - 学习使用断点和调试工具,它们可以帮助你更好地理解代码的执行流程并找出问题。

4. **问题解决策略**:
    - 代码中存在一些不必要的变量和处理,可能没有选择最佳的策略来解决问题。
    
    **提高方法**:
    - 当遇到问题时,先花时间思考并计划解决策略,而不是立即开始编码。
    - 分析不同的策略,评估其优劣,然后选择一个执行。

5. **学习与反思**:
    - 对已知的问题和错误进行深入的分析和反思,这是提高编程技能的关键。
   
    **提高方法**:
    - 在遇到问题或错误时,尝试自己找出原因并修复,而不是立即寻求帮助。
    - 反思每次编码的经验,总结学到的内容,并记录下来。

最后,不要灰心。每个人在学习编程的过程中都会犯错误。关键是从中学习并不断提高。多练习,勤于思考,经常反思,随着时间的推移,你会看到显著的进步。

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/74884.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

成集云 | 用友U8采购请购单同步钉钉 | 解决方案

源系统成集云目标系统 方案介绍 用友U8是中国用友集团开发和推出的一款企业级管理软件产品。具有丰富的功能模块&#xff0c;包括财务管理、采购管理、销售管理、库存管理、生产管理、人力资源管理、客户关系管理等&#xff0c;可根据企业的需求选择相应的模块进行集…

C++之std::call_once实例(一百七十五)

简介&#xff1a; CSDN博客专家&#xff0c;专注Android/Linux系统&#xff0c;分享多mic语音方案、音视频、编解码等技术&#xff0c;与大家一起成长&#xff01; 优质专栏&#xff1a;Audio工程师进阶系列【原创干货持续更新中……】&#x1f680; 人生格言&#xff1a; 人生…

【Vue-Router】重定向

First.vue <template><h1>First Seciton</h1> </template>Second.vue&#xff0c;Third.vue代码同理 UserSettings.vue <template><h1>UserSettings</h1><router-link to"/settings/children1">children1</ro…

Java Vue Uniapp MES生产执行管理系统

本MES系统是一款B/S结构、通用的生产执行管理系统&#xff0c;功能强大&#xff01; 系统基于多年离散智造行业的业务经验组建&#xff0c;主要目的是为国内离散制造业的中小企业提供一个专业化、通用性、低成本的MES系统解决方案。 联系作者获取

Webpack 的 sass-loader 在生产模式下最小化 CSS 问题

学习webpack时候我发现一个问题&#xff1a; 将mode 改为production模式后&#xff0c;生成的css会被压缩了&#xff0c;但是我并没有引入CssMinimizerPlugin插件&#xff0c;然后我试着将optimization.minimize 设置为false&#xff0c;测试是否为webpack自带的压缩&#xff0…

vscode的配置和使用

1.侧边栏调整大小 放大&#xff1a;View -> Appearance -> Zoom in&#xff08;快捷键Ctrl &#xff09; 缩小&#xff1a;View -> Appearance -> Zoom out&#xff08;快捷键Ctrl -&#xff09; 侧边栏字体调整到合适大小后&#xff0c;可以按下一步调整代码区…

MFC创建和使用OCX控件

文章目录 MFC建立OCX控件注册OCX控件与反注册使用Internet Explorer测试ocx控件OCX控件添加方法OCX控件添加事件Web使用OCX控件MFC使用OCX控件使用OCX控件调用ocx的功能函数对ocx的事件响应OCX控件调试工具tstcon32.exe加载ocx控件使用tstcon32.exe调试ocxMFC建立OCX控件 新建…

[HDLBits] Exams/m2014 q4c

Implement the following circuit: module top_module (input clk,input d, input r, // synchronous resetoutput q);always(posedge clk) beginif(r) q<1b0;elseq<d;end endmodule

springboot第35集:微服务与flutter安卓App开发

Google Playplay.google.com/apps/publis…[1]应用宝open.qq.com/[2]百度手机助手app.baidu.com/[3]360 手机助手dev.360.cn/[4]vivo 应用商店dev.vivo.com.cn/[5]OPPO 软件商店&#xff08;一加&#xff09;open.oppomobile.com/[6]小米应用商店dev.mi.com/[7]华为应用市场dev…

TX Text Control .NET Server for ASP.NET Crack

TX Text Control .NET Server for ASP.NET Crack TX Text Control.NET Server for ASP.NET是用于Web应用程序或服务的服务器端组件。它是一个完全可编程的ASP.NET文字处理引擎&#xff0c;提供了广泛的文字处理功能。使用TX Text Control.NET Server&#xff0c;程序员可以开发…

数据库内日期类型数据大于小于条件查找注意事项

只传date格式的日期取查datetime的字段的话默认是 00:00:00 日期类型字符串需要使用 ’ ’ 单引号括住 使用大于小于条件查询某一天的日期数据 前后判断条件不能是同一天 一个例子 数据库内数据&#xff1a; 查询2023-08-14之后的数据&#xff1a; select * from tetst…

2023牛客暑期多校训练营9-J Puzzle: Star Battle

2023牛客暑期多校训练营9-J Puzzle: Star Battle https://ac.nowcoder.com/acm/contest/57363/J 文章目录 2023牛客暑期多校训练营9-J Puzzle: Star Battle题意解题思路代码 题意 解题思路 出题人都说是诈骗题&#xff08;&#xff0c;可以发现满足每行每列恰好有 n n n个星…

React+Typescript清理项目环境

上文 创建一个 ReactTypescript 项目 我们创建出了一个 React配合Ts开发的项目环境 那么 本文 我们先将环境清理感觉 方便后续开发 我们先来聊一下React的一个目录结构 跟我们之前开发的React项目还是有一些区别 public 主要是存放一些静态资源文件 例如 html 图片 icon之类的 …

Leaflet入门,Leaflet如何自定义版权信息,以vue2-leaflet修改自定义版权为例

前言 本章讲解使用Leaflet的vue2-leaflet或者vue-leaflet插件来实现自定义版权信息的功能。 # 实现效果演示 见图片右下角版权信息 vue如何使用Leaflet vue2如何使用:《Leaflet入门,如何使用vue2-leaflet实现vue2双向绑定式的使用Leaflet地图,以及初始化后拿到leaflet对象…

安全加密框架图——Oracle安全开发者

Oracle安全开发者 ACLs 设计 ACLs&#xff08;访问控制列表&#xff09;时&#xff0c;可以根据以下思路进行设计&#xff1a; 所有者文件权限&#xff1a;确定文件的所有者能够对文件执行哪些操作&#xff0c;如读取、写入、执行等。这可以根据文件的性质和拥有者的职责来决…

安装istio和部署实例以及仪表盘

安装Istio 接下来我们将介绍如何在 Kubernetes 集群中安装 Istio&#xff0c;这里我们使用的是最新的 1.10.3 版本。 下面的命令可以下载指定的 1.10.3 版本的 Istio: ➜ ~ curl -L https://istio.io/downloadIstio | ISTIO_VERSION1.10.3 sh -如果安装失败&#xff0c;可以…

Linux命令200例:date用于显示和设置系统的日期和时间

&#x1f3c6;作者简介&#xff0c;黑夜开发者&#xff0c;全栈领域新星创作者✌。CSDN专家博主&#xff0c;阿里云社区专家博主&#xff0c;2023年6月csdn上海赛道top4。 &#x1f3c6;数年电商行业从业经验&#xff0c;历任核心研发工程师&#xff0c;项目技术负责人。 &…

gearman使用心得

gearman基础 工作原理 部署架构 本质上&#xff0c;gearman可以认为是一个分布式任务队列&#xff0c;client是生产者&#xff0c;worker则是消费者。gearman并不主动分发任务&#xff0c;而是由worker到它那里去取任务执行&#xff0c;所以它采用的是类似kafka的pull消费模式…

自然语言处理: 第八章chatGPT的搭建

理论基础 Transformer 大模型家族可以分成三类, 至于三者的区别可以参考上一章: Encoder-only,Decoder-only, 只需要Pre_trainEncoder-decoder , 可以在一些任务上无需进行fine_tune 必须要在下游任务进行微调比如Bert &#xff0c; Bart 。 T5 这种无需要微调就能完成一些任…

Mr. Cappuccino的第62杯咖啡——Spring之Bean的生命周期

Spring之Bean的生命周期 Aware接口项目结构项目代码运行结果源代码使用场景 InitializingBean接口项目结构项目代码运行结果源代码 BeanFactoryPostProcessor接口项目结构项目代码运行结果源代码 Bean的生命周期项目结构项目代码运行结果源代码 Aware接口 实现Aware接口是为了…