更具体地说,如何学习竞争性编程,但从笔记开始。
一些背景资料:所以我对编程很陌生。我注意到竞争性编程很像数学竞赛。这些都是现实世界的问题,只要记住几个考试就不像这个行业。例如,数学不仅仅是一门“学习和反悔”的学科。更确切地说,每个人都对二次数有所了解,但如果我要求你解决这个问题:
两个不同的正数a和b的倒数是1,a+b是什么?
在不知道如何应用的情况下,你学到的关于二次方的信息就会变得毫无用处。例如,通过这个问题,我可以这样做:
设X是一个与其倒数相差1的数字。这意味着X+1=1/X和X-1=1/X ( X的倒数为1/X)。然后,我将这两个方程转化为二次型: X^2+X-1=0和X^2-X-1等于零。然后,我将使用二次公式并对两个方程的X进行求解。对于第一个方程,您将得到:(1 +- sqrt(5))/2和第二个:(-1+-sqrt(5))/2通知,+-表示(正负)。我将取两者的正数,并将它们相加,得到sqrt(5)=a+b。
对于这些注释,如果我必须搜索它们,或者意识到一些重要的东西,我可能会说:大的想法1:当有多个词,如"a“和"b",概括或简化为一个术语。大思想2:如果问题提到两个数字的“正/负”,试着将问题转化/关联为二次型。
这些会是很好的音符。
但是,假设您在Java中做了一个问题,比如:
用Java编写一个方法,如果参数是回文,则返回布尔值。例如,isPalindrome( 1221 )应该返回true,因为1221是相同的向后或正面单词。类似地,isPalindrome(-1221)应该返回true,因为负数可以是回文。
现在,过了一段时间,我不知道该如何做,所以我搜索答案,得到:
public static boolean isPalindrome(int number) {
int reverse = 0;
int numberClone = number;
while(numberClone != 0) {
int lastDigit = numberClone % 10;
reverse = reverse * 10;
reverse += lastDigit;
numberClone /= 10;
}
if (number == reverse) {
return true;
} else {
return false;
}
}当看到这样一个新的编程解决方案时,我如何找到所使用的技术,并将其推广到我应该何时应用该技术的所有实例?
发布于 2019-10-13 22:02:09
竞争性编程与您将在行业中看到的编程非常不同。您所看到的使代码可读性和可维护性的一切都是浪费时间。
竞争性编程和数学也有很大的不同。是的,有一个解决问题的组件(这有点费解),但也有实现部分,您需要在输入和一般代码编写时提高速度。
例如,您可能会设计一个需要排序的问题的解决方案。然后,就需要使用正确的语言特性来进行排序。
根据经验,我会说,您需要习惯语言,然后学习编程技巧和技巧来解决问题。然后,通过练习和阅读解决方案来提高速度。
在做笔记时,有两件事是相关的:算法本身以及可能会帮助您加快代码编写速度的有趣的实现技巧。其余的来自于语言的知识。
发布于 2019-10-12 01:46:16
这只是我的意见,并接受你的问题。
数学是确定的,客观的。另一方面,程序设计是根据所解决的问题主观地定义的。“伟大的想法”可以是任何人的观点。
一般来说,您的课程应该遵循单一的责任原则。你的方法简明扼要。
在编程中,您可以查看业务的目标和业务需要解决的问题。你制定了所有的商业规则。那么,一旦所有的业务规则都被知道,最重要的一步就是找出谁负责这些规则,以及那些规则的责任,也就是那些规则最容易被改变,谁来决定做出改变。然后收集变化最大的规则,用最少的人来决定一个变化,并将所有的商业规则--知识组合成一个单独的类来做特定的事情。这样,当更改发生时,它会影响单个类,并影响单个组件或库。
随之而来的是公司和公司必须对我们程序员为他们构建的应用程序承担起所有权和责任。
那么,在这一切中,哪里能找到一个伟大的想法呢?
这取决于每个公司,从一个目标到下一个目标。
每个程序员都会带来他们自己的经验和主观观点。确实没有一套硬性的规则,而是原则和指导方针。
https://softwareengineering.stackexchange.com/questions/399608
复制相似问题