7-2 然后是几点 (15分)

基础编程题目集

题目如下:
在这里插入图片描述

这道题目着实有点意思,比第一道题用了更少的时间,虽然wa了两次~~(虽然只是因为想看错哪里)~~
我以为这题很难(实际上点比较多而已)。

上一波最后的正确代码:

#include<stdio.h>
int main()
{
	int hour, minute;
	int a, b;
	scanf("%d %d", &a, &b);//输入两个数据
	if (b > 0) //看看流逝的分钟数是否为正
	{
		minute = (a % 100 + b) % 60;//先取个十两位再加上输入进去的分钟数,用60取余
		hour = a / 100 + (a % 100 + b) / 60;//取百千两位再加上分钟进位上来的
		if (minute >= 10)
			printf("%d%d", hour, minute);
		else
			printf("%d0%d", hour, minute);
	}
	else
	 {
		minute = a % 100;
		hour = a / 100;
		while (minute + b <= 0)
		{
			minute = 60 + minute;
			hour--;
		}
		minute = minute + b;
		if (minute >= 10)
			printf("%d%d", hour, minute);
		else
			printf("%d0%d", hour, minute);
	}
	return 0;
}

虽然这样有一点点繁琐,可以把第二次判断放在放在第一次判断的外面。(但是我懒,直接复制了)
在和同学讨论中发现我的代码也有一点问题-------一开始只注意了minute!=0的情况,还有1-9的情况。
有几个注意的点:

1、minute >= 60时要进位。(进多少hour加多少)

2、当minute为一位数的时候,你需要给minute前面加个0补齐:

		if (minute >= 10)
			printf("%d%d", hour, minute);
		else
			printf("%d0%d", hour, minute);

没错,就是上面这个语句,可以放到外面来着,但是我懒,就复制了。

3、这是我同学的代码出现的问题:

因为我用的是hour和minute两个变量,他用了一个变量,所以可能会出现当hour等于0的时候没输出0。
错误的答案
如果你的答案也是这样,那么可以翻到最后看看我的同学是怎么改的。

4、题干中有说第二个数可以是负数,所以你要考虑负数的情况(这就是为什么我wa了两次的原因之一)。

这是我一开始没有考虑道负数以及小毛病

#include<stdio.h>
int main()
{
	int hour, minute;
	int a, b;
	scanf("%d %d", &a, &b);
	minute = (a % 100 + b) % 60;
	hour = a / 100 +(a % 100 + b) / 60;
	if (minute <= 10)
		printf("%d%d", hour, minute);
	else
		printf("%d0%d", hour, minute);
	return 0;
}

如果出现上述小问题,可以看看自己的代码有啥错误呢。

现在,我要附上我同学一开始错误的代码了(少了0的):

#include <stdio.h>
int main()
{
	int x, y, t, i, z, c, a, b, q;
	scanf_s("%4d %d", &t, &i);
	if (i >= 00)
	{
		x = t % 10;
		y = ((t - x) / 10) % 10;
		z = y * 10 + x;
		c = (t - z) / 100;
		a = z + i;
		if (a >= 60)
			b = a / 60;
		else
			b = 0;
		c = c + b;
		q = a - 60 * b;
		printf("%d", 100 * c + q);
	}
	else
	{
		i = -i;
		x = t % 10;
		y = ((t - x) / 10) % 10;
		z = y * 10 + x;
		c = (t - z) / 100;
		a = z - i;
		if (a >= 0)
			printf("%d", c * 100 + a);
		else
		{
			a = -a;
			if (a >= 60)
				b = a / 60;
			else
				b = 0;
			c = c - b - 1;
			q = 60 - (a - 60 * b);
			printf("%d", 100 * c + q);
		}
	}
	return 0;
}

我知道,看错误代码不一定看得出来错哪里。
那就看看正确代码吧:

#include <stdio.h>
int main()
{
	int x, y, t, i, z, c, a, b, q;
	scanf("%4d %d", &t, &i);
	if (i >= 0)
	{
		x = t % 10;
		y = ((t - x) / 10) % 10;
		z = y * 10 + x;
		c = (t - z) / 100;
		a = z + i;
		if (a >= 60)
			b = a / 60;
		else
			b = 0;
		c = c + b;
		q = a - 60 * b;
		if (c == 0)
			printf("0%d", q);
		else
			printf("%d", c * 100 + q);
	}
	else
	{
		i = -i;
		x = t % 10;
		y = ((t - x) / 10) % 10;
		z = y * 10 + x;
		c = (t - z) / 100;
		a = z - i;
		if (a >= 0)
			if (c == 0)
				printf("0%d", a);
			else
				printf("%d", c * 100 + a);
		else
		{
			a = -a;
			if (a >= 60)
				b = a / 60;
			else
				b = 0;
			c = c - b - 1;
			q = 60 - (a - 60 * b);
			if (c == 0)
				printf("0%d", q);
			else
				printf("%d", c * 100 + q);
		}
	}
	return 0;
}

显而易见,我的代码还是很简洁的哈哈哈哈。
就这样,第二题也轻松的解决了。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值