鱼C论坛

 找回密码
 立即注册
查看: 1301|回复: 6

[已解决]对一个实际问题的思路转换为代码解决的正确顺序是什么?

[复制链接]
发表于 2018-6-11 22:52:54 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
最近看到005的课堂,课后作业有一个是:写一个程序判定给定年份为闰年。
然后发现,无从下手,不知道该写什么,用什么语句,需要给几个量赋值,逻辑顺序很乱。
你们是怎么思考一个实际问题进行代码转化的呢?是首先抓住核心判断语句写呢/还是先判断需要多少循环?几个量?

或者是直接先写一个最简单的式子出来,然后一步步添加功能好呢?

养成怎样的正确的思考方式好呢?
最佳答案
2018-6-11 23:55:31
以我现在的水平,看到这道题: 写一个程序判定给定年份为闰年。
首先会想到的是,怎么样才是闰年?

普通年(不能被100整除的年份)能被4整除的为闰年。(如2004年就是闰年,1999年不是闰年);
世纪年(能被100整除的年份)能被400整除的是闰年。(如2000年是闰年,1900年不是闰年);


那从上面我们就可以得知了以下内容:
语句1、如果 year (变量) 不能被100整除的同时,又能被4整除,就是闰年。
语句2、如果 year (变量) 能被400整除,就是闰年。

实际上为了优化这段代码,我们应该先判断语句2。
所以我们就得到了以下代码:
  1. if year % 400 == 0:
  2.    return True

  3. elif year % 100 != 0 && year % 4:
  4.    return True
  5. else:
  6.    return False
复制代码


这就是这个作业的核心代码,也可以叫核心算法。

至于你问的如何转换这个思路到具体代码上,
我认为,在解决这种实际问题上,应该抓准自己的思路,
代码如何写其实不重要,重要的是你是否知道这个问题该怎么解决。
就像这个闰年的问题一样,当你知道了闰年的判断条件,你就很容易去将其转换成代码语句。
当然,前提是你的基础要打好。

在日后,你可能会遇到更复杂的代码需求,要求更复杂,精密,搞笑的算法代码来实现你所需要的功能。
也要把准,到底这个问题的最终判断在哪里? 比如怎么判断它是对的? 怎么判断它是错的? 怎么实现?
核心的内容并不在于 if .... else.... 这些语句, 而是在于它实际上是怎么流程。 所以当我们掌握多种语言以后,
我们可以用不同语言实现同样的功能,因为我们掌握了核心的内容,就是这个怎么样才算是闰年?


下面是一段C语言写的闰年检测函数,供你对比:
  1. int RunNian(int year)
  2. {
  3.    if (year % 400 == 0 ) return 1;
  4.    if (year % 100 != 0 && year % 4 == 0) return 1;
  5.    return 0;
  6. }
复制代码
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2018-6-11 22:57:24 | 显示全部楼层
语言只是辅助,核心是数学思想
或者专业点的说法,核心是 数据结构与算法
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 1 反对 0

使用道具 举报

发表于 2018-6-11 23:55:31 | 显示全部楼层    本楼为最佳答案   
以我现在的水平,看到这道题: 写一个程序判定给定年份为闰年。
首先会想到的是,怎么样才是闰年?

普通年(不能被100整除的年份)能被4整除的为闰年。(如2004年就是闰年,1999年不是闰年);
世纪年(能被100整除的年份)能被400整除的是闰年。(如2000年是闰年,1900年不是闰年);


那从上面我们就可以得知了以下内容:
语句1、如果 year (变量) 不能被100整除的同时,又能被4整除,就是闰年。
语句2、如果 year (变量) 能被400整除,就是闰年。

实际上为了优化这段代码,我们应该先判断语句2。
所以我们就得到了以下代码:
  1. if year % 400 == 0:
  2.    return True

  3. elif year % 100 != 0 && year % 4:
  4.    return True
  5. else:
  6.    return False
复制代码


这就是这个作业的核心代码,也可以叫核心算法。

至于你问的如何转换这个思路到具体代码上,
我认为,在解决这种实际问题上,应该抓准自己的思路,
代码如何写其实不重要,重要的是你是否知道这个问题该怎么解决。
就像这个闰年的问题一样,当你知道了闰年的判断条件,你就很容易去将其转换成代码语句。
当然,前提是你的基础要打好。

在日后,你可能会遇到更复杂的代码需求,要求更复杂,精密,搞笑的算法代码来实现你所需要的功能。
也要把准,到底这个问题的最终判断在哪里? 比如怎么判断它是对的? 怎么判断它是错的? 怎么实现?
核心的内容并不在于 if .... else.... 这些语句, 而是在于它实际上是怎么流程。 所以当我们掌握多种语言以后,
我们可以用不同语言实现同样的功能,因为我们掌握了核心的内容,就是这个怎么样才算是闰年?


下面是一段C语言写的闰年检测函数,供你对比:
  1. int RunNian(int year)
  2. {
  3.    if (year % 400 == 0 ) return 1;
  4.    if (year % 100 != 0 && year % 4 == 0) return 1;
  5.    return 0;
  6. }
复制代码
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-6-11 23:56:20 | 显示全部楼层
如果有帮助,请设置为最佳答案,如果有错误,欢迎指正,今天开了一天车头都晕了,代码也是直接在论坛的编辑器里打的,可能有错。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-6-12 00:46:16 | 显示全部楼层
simplerjiang 发表于 2018-6-11 23:56
如果有帮助,请设置为最佳答案,如果有错误,欢迎指正,今天开了一天车头都晕了,代码也是直接在论坛的编辑 ...

第四行代码应该改成
"elif year % 100 != 0 & year % 4:"吧,我记得python中没有&&的。
另外问一下,这一行中的year%4放在elif语句中是什么意思呢?第一次见到这种形式的判断啊
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-6-12 08:16:48 | 显示全部楼层
首先考虑如果是手工做的话该如何解题,然后考虑程序实现的方法,你也可以画出流程图,把流程图翻译成代码
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-6-12 12:26:05 | 显示全部楼层
zero_sunshine 发表于 2018-6-12 00:46
第四行代码应该改成
"elif year % 100 != 0 & year % 4:"吧,我记得python中没有&&的。
另外问一下,这 ...

哈哈哈,你说的没错,确实是我写错了
  1. if year % 400 == 0:
  2.    return True

  3. elif year % 100 != 0 and year % 4 == 0:
  4.    return True
  5. else:
  6.    return False
复制代码
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-4-30 22:52

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表