心得

  1. 只有用了×乘法就要小心精度
  2. HDU:2006

    求奇数的乘积

    Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others)
    Total Submission(s): 95202    Accepted Submission(s): 58384


    Problem Description
    给你n个整数,求他们中所有奇数的乘积。
     

    Input
    输入数据包含多个测试实例,每个测试实例占一行,每行的第一个数为n,表示本组数据一共有n个,接着是n个整数,你可以假设每组数据必定至少存在一个奇数。
     

    Output
    输出每组数中的所有奇数的乘积,对于测试实例,输出一行。
     

    Sample Input
        
        
    3 1 2 3 4 2 3 4 5
     

    Sample Output
        
        
    3 15
     
    这种没给n范围的题啊,一般就是int装得下的,但是我总想如果是大数怎么怎么样(最近真的被大数搞怕了,模拟位运算对我这种萌新来说还是很复杂的),套路还是先找奇数,这个是必由之路,但是输入的奇数那么那么大就要另辟蹊径啦,因为是大数乘积,肯定要用字符数组来装噻。具体实现等我搞好了大数加法再港。
    1.  if(n>m)  
    2.         {  
    3.             t=n;n=m;m=t;  
    4.         }  
    每当指定了范围的,先保证前小后大,怎么输入都能得到结果。
  3. 疑惑:标志变量,临时变量放的位置不同结果就大大不同。到底怎么放呢?
  4. !用作非运算时,是单目运算符,与右侧的表达式结合。
    !expr的含义为(expr == 0), 即当expr值为0时,结果为1,否则结果为0
  5. "胶水"能力其实就是一个人编程素养的综合体现。一个合格的工程师应该是用最低的资源实现最大的效益,所以所谓的造不造轮子只是一个具体决策而非一种死磕的价值观。但是无论是造轮子还是用轮子, 对我而言有一个天条就是, 我必须对我使用的轮子有足够了解我才能去使用它,如果没有,我就必须花力气去了解他。否则,很容易就成为一种API程序员, 比如你可能用各类API实现了一个人脸识别的App,然而事实上你对人脸识别技术一无所知。不出问题还能装装逼,出了问题就跪了。

    所以我理解的轮子, 只是为了简化我的体力劳动或辅助我的智力劳动, 但如果替代了我的智力劳动, 让我纯粹做了体力劳动那就没意思了。当然仅就个人学习过程而言, 进了公司自然目标和境况都不同了也不是个人能够决定的了的了。

  6. 回答这个问题,必须要搞懂什么是编程。编程的最终结果是程序,而程序=数据+算法。
    从这个公式就可以很好的分析这个问题了。

    首先说数据,排序算法中的数据是各种原始待排序的数字或字符,
    工程项目中的数据指的是各种各样的业务数据。
    再说算法,研究理论的各种算法不难理解,如简单的二叉树排序算法等,
    工程项目的算法就复杂很多(不难但复杂),比如行政审批的流程,
    针对一个行政审批事项(数据),需要了解客户的业务流程,审批权限等,
    才能设计算法。算法并不难,难在对客户业务的理解,并转化成计算机语言。
    以上能解释各种系统或工程下,什么是数据,什么是算法。

    那么什么是编程能力?编程能力有广义和狭义两种解释。
    先说狭义上的编程能力,即写代码能力。大家都好理解,有经验的人也都清楚。
    写代码能力重要的有两点,一是知道什么好代码,二是会拷贝代码(拷贝也是艺术哈)。
    掌握这两点即可。很简单,多写,多看,多拷,多调试。

    广义上编程能力是根据需求理清数据和算法的能力。
    理清后就变成狭义的编程能力了。举个例子,教授告诉你使用哪个数学理论来处理某一类问题,
    然后你自己负责去实现即可。

    不知道到此大家是否理解编程能力了。
    那么如何提升编程能力呢?首先要知道为什么要提升编程能力。
    计算机归根结底是个工具,要提升编程能力的目的就是为了解决日常中的各种问题的。
    比如你写个小工具,进行大小写金额转换,你目的是解决人们经常要根据小写金额填写大写金额的问题。
    基于此,提升编程能力就是提升你解决问题的能力,证明你存在的价值。

    但人的能力有限,不可能所有问题你都能解决。
    所以需要你深入到某一个行业或某一类行业,了解行业的特性,发现行业的问题,
    使用你的计算机能力解决存在的问题。如现在国家提倡的互联网+就是这个道理。

    以上对编程能力的理解可能针对在编程行业已经做好几年的人比较好理解。

    针对刚入行的人或者还没有开窍的人来说,如何提高编程能力呢?
    我这里针对可能大家忽视或容易犯错误的地方提几个待注意和提高的地方。
    一、代码调试能力。(也就是问题诊断能力)
    二、23种设计模式必须要看,且理解,最后灵活应用。(前人经验要学习)
    三、对代码要用艺术眼光去审美。(精益求精,工匠精神)
    以上三点做好了,你至少是编程高手中的高手了。

    至于各种平台或类库,很简单了,知道它想干什么,解决什么问题即可了。遇到了再学就赶趟。
  7. 没有严格意义上的真正编程能力,只有解决问题的能力。你解决的任何问题都依赖于别人解决过的子问题,所以不存在绝对的原创还是复用。

    这个问题就有点像 XKCD 某漫画,生物学家笑社会学家不纯粹,化学家笑生物学家不纯粹,物理学家笑化学家不纯粹,数学家笑物理学家不纯粹。其实大家工作在不同的维度,不能说一个维度的工作足够成功别一个维度就可以被取代了。化学足够好就能解决所有生物学问题吗?显然不是的。

    你用开源项目来搭应用,你有你的上游和下游。上游是要有人去写开源项目,里面有些很多的算法是很多人长期优化的结果。没有这些人专注于细节,就没有那么好的开源项目给你直接拿来用。你的下游是更大的软件项目。你一个人的输出能写一个小应用,但在一个大应用里只能算是个功能。在公司里会有高级工程师用你写的功能来搭大应用。再下流而有公司的高管负责用多个应用来组合出公司的战略。

    在这过程中,真正有趣的问题是如果你的上游不存在了,你还能解决同样的问题吗?如果你依赖的开源项目不存在,你怎么办?如果存在但 bug 很多,你会选择怎样解决?分析和解决这种问题的 meta 能力很重要。你能做好的话,换不同的具体问题你都能有一套方法解决。


    作者:Cat Chen
    链接:https://www.zhihu.com/question/31034164/answer/135808891
    来源:知乎
    著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值