今天看了《算法竞赛入门经典》的前几节,感觉这本书真的不错。里面有一些思想以及给与我们这些信任的建议真的不错。下面举个栗子吧。
例:输入两个数A,B,并将A与B的值交值后输出。
(PS:这道题作为菜鸟入门必做的题大家应该都做过,所以我就不详细的写题意了)
输入格式:
A B
输出格式:
B A
思路1:这道题作为新手肯定会按照老师教的采用创建中间变量的方法来做。创建中间变量是什么样呢?《算法训练》里是这么说的:创建中间变量来实现两个数的值的变换,就好比此时你有一瓶酱油,一瓶醋,当然两个瓶子的容积是一样的,即一样大,此时就用第三个瓶子来充当转换站。因为你无法直接把醋倒入酱油中,所以就先把醋倒入空瓶,然后把酱油倒入之前装醋的瓶子,然后把醋倒入之前装酱油的瓶子,酱油倒入之前放醋的瓶子,从而实现两者的交换。而此时这个交换过程中的充当转换站的瓶子就是第三个临时变量。可能有点绕嘴。不过理解起来 还是很形象的。废话不多说上代码!
代码如下:
#include <iostream>
using namespace std;
int main(){
int a, b, t;
cin >> a >> b;
t = a;
a = b;
b = t;
cout << a << b;
return 0;
}
思路2:根据数学方法进行计算,这个我直接上代码。因为看代码比较直观。
#include <iostream>
using namespace std;
int main(){
int a, b;
cin >> a >> b;
a = a + b; //执行此条语句时 a = a0 + b0, b = b0;
b = a - b; //执行此条语句时 a = a0 + b0, b = a0;
a = a - b; //执行此条语句时 a = b0, b = a0;
cout << a <<' '<<b; //最终输出答案,这种方法相比于上面的方法显得就没那么好了。不过更理性一点。
return 0;
}
思路3:这种方法你看完后可能觉得有些投机取巧了,但是实际上,他更偏向实用主义。而且通过这段代码也颠覆了我之前的好多传统思想,也让我毅然决然的继续读《算法竞赛入门经典》这本书,按照作者的说就是:“我们的目标是解决问题,而不是为了写程序而写程序,同时应保持简单(Keep It Simple and Stupid,Kiss),而不是自己创造条件去展示编程技巧。”下面上代码:
#include <iostream>
using namespace std;
int main(){
int a, b;
cin >> a >> b;
cout << b << a <<endl;
return 0;
}
看完之后你是不是觉得明白了什么,或者恍然大悟,算法真的神奇。更何况这还不涉及到更多的算法。随着我的深入学习我会加入更多的知识,以及自己的愚见,我会尽量尽自己的能力把文章写好,以第一次博客为警示让自己更加努力。感谢小仙女~~~让我每天都有动力坚持下去。谢谢你!