算法:做题迷思

检查错误(算法实现错误,逻辑错误)

在编程的过程中,有俩个核心的的东西:

1是算法,即解决问题的步骤.

2是实现上述步骤的所需要的配套代码

但是我认为1是非常依赖于直觉的,需要一定的天赋。有的人会在这上面花费大量的时间而出不来结果,甚至会由于步骤的不合理导致根本没有可实现的配套代码。

例如:今天写到时间换算的问题,

我的思路是:

1.原来得时间不变(12:30:45)

2.将经过的秒数除以3600取整,得到的数字加上小时。(且时间是24h制,相加后的小时位不能大于24)

将经过的秒数除以3600取余后的数字再除以60取整得到,得到的数字加上分钟。

(但实际上这个在数学上是无法实现的,因为150除以3600取余后的数字为0,也就无法实现接下来的操作,因此还得分情况。按这条思路进行就会导致代码臃肿)

.....

这是正确答案的步骤

1.将原有的时分秒的时间统一转化为以秒为单位的时间

(这一步一开始时我压根没想到)

2.再通过整除3600s得到小时;剩下计算分钟和秒比较符合一般直觉。

	scanf("%d:%d:%d",&hour,&min,&second);
	scanf("%d",&later);
	//处理 
	int total_second=hour*3600+min*60+second;
	total_second+=later;
	
	hour=total_second/3600;
	min=(total_second%3600)/60;
	second=total_second%60;
	printf("After %d second is %02d:%02d:%02d",later,hour,min,second);

在经历过这次教训后,我深刻感觉到我个人天赋的匮乏。我唯一能做的就是将这道题的思路记忆下来,下次遇到类似的问题能够举一反三,也就是思路的复用。然后我后面要做的事就是不断刷题,将一些常规的做题思路记忆...

总结以上的要求:1.刷题

2.将题目的思路记忆下来(将步骤拆分)

3.做下一道题目,并看看能否用到以往所做题的算法。

4.循环以上步骤,期待直觉能在此基础上培养...

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值