菜鸟学算法系列-读《算法竞赛入门经典》的感想(一)

今天看了《算法竞赛入门经典》的前几节,感觉这本书真的不错。里面有一些思想以及给与我们这些信任的建议真的不错。下面举个栗子吧。

例:输入两个数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;
}

看完之后你是不是觉得明白了什么,或者恍然大悟,算法真的神奇。更何况这还不涉及到更多的算法。随着我的深入学习我会加入更多的知识,以及自己的愚见,我会尽量尽自己的能力把文章写好,以第一次博客为警示让自己更加努力。感谢小仙女~~~让我每天都有动力坚持下去。谢谢你!

    原文作者:我在未名湖畔
    原文地址: https://blog.csdn.net/jkl46607/article/details/79797279
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞