菜鸟学算法--简单的交换和最大公约数算法入门篇

工作之后我们大部分的时间实在研究如何如何学习一门语言 如何如何掌握一门技术,但是作为编程的本质 数据结构和算法 我们慢慢的忽略了 。

工作后的很多程序员真的没有大学生一样的时间 去静下心来去增加自己的底蕴,这是我深有体会的事情当然我这里指的是和我有累死感觉的人。

学习是一个过程,从简入繁 一贯如此,记录下来只为 记录自己的点点滴滴。

算法的本质并不是我们程序员去创造算法 而是我们 按照先人创造的算法思想 用代码来实现算法。

下面开始介绍两个 简单的例子 一个是交换 一个是最大公约数算法。

简单的交换

#include "stdafx.h"
#include <stdio.h>
/*
  我们的目标是
  交换abcd的值为bcda     函数 M1   M2
  此处代码相信都是再小儿科不过的代码了,但是小儿科的代码实际上也是有小儿科的写法。
  我们在写代码的时候要保证的两点  高效 快速 最小的损耗 完成功能即可 。
*/
int a = 1, b = 2, c = 3, d = 4;
int arr[4] = { 1, 2, 3, 4 };

//abcd的值变成 bcda
#define  M1(ta,tb,tc,td)         int tem;  tem=td ; td=ta;ta=tb;tb=tc;tc=tem
//abcd的值变成 bcda
#define M2(ta,tb,tc,td)                  ta+=td;td=ta-td;ta-=td;             ta+=tc;tc=ta-tc;ta-=tc;  			ta+=tb;tb=ta-tb;ta-=tb;
#define  RESET(ta,tb,tc,td)           ta = 1; tb = 2; tc = 3; td = 4; 

int _tmain(int argc, _TCHAR* argv[])
{
	//首先对abcd进行值替换成bcda 一说到替换 很多新手就想到了  t=a  a=b b=t~
	//这里中间多一步 空间的 浪费 即  t中间变量  实际上我们可以  a=a+b; b=a-b; a=a-b;
	//我们可以这样去写这个代码 

	printf("M2----abcd的值:%d,%d,%d,%d\n", a, b, c, d);
	M2(a, b, c, d);
	printf("M2----abcd的值:%d,%d,%d,%d\n", a, b, c, d);
	printf("\n");
	RESET(a, b, c, d);
	//不同的情况下我们使用不同的方式 来解决 ,对于两个变量的交换我们可以用上述的  无中间变量的方式来交换看似减少了空间占用 ,但是四个变量呢 ?四个变量的交换 貌似情况变了
	//实现如M1 尽管我实现的不好 但是的确是减少了 传统意义上的交换步骤  这种代码其实只有在大家 刚接触程序的时候才会写道~~~~哈哈
	//这也印证了一点  情况复杂多变  代码实现方式也很多   我们要做到  最少的代码 最少的计算次数 完成目的即可。
	printf("M1----abcd的值:%d,%d,%d,%d\n", a, b, c, d);
	M1(a, b, c, d);
	printf("M1----abcd的值:%d,%d,%d,%d\n", a, b, c, d);
	return 0;
}

下面一个是 求最大公约数的算法 欧几里得算法

#include "stdafx.h"
//求最大公约数
//算法欧几里得算法的应用
//获得最大公约数
//现在求ab的最大公约数 既能被a又能被b整除的数字
//如果你不了解 欧几里得算法 那么可能会 循环来解决问题 ...那么很糟糕的
//我们程序员的算法本质 是 拿来数学算法 思想转换成代码 这就是我们大部分使用算法的本质  除非你是算法研究者 那么 另当别论
//看看这端程序如果你不知道 欧几里得算法  衍生的 求最大公约数算法 你该如何去写程序?或许是多个循环吧,~
int   GreatestCommonDivision(int a, int b)
{
	//不能为负数
	if (a < 0 || b < 0)
		return -1;
	///保证a一定大于等于b
	if (a < b)
	{
		a = a + b;
		b = a - b;
		a = a - b;
	}
	int r = 0;
	//取余数 如果余数等于0 那么 最大公约数既为 当前a
	while ((r = a%b) != 0)
	{
		//否则 a<-b   b<-r    这里的余数r 一定是小于b的
		a = b;
		b = r;
	}
	//等于0就退出了
	return  b;
}

int _tmain(int argc, char**argv)
{
	int a = 15, b = 220;
	printf("%d和%d的最大公约数是:%d\n", a, b, GreatestCommonDivision(a, b));
	return 0;
}

简单的入门就到这里 ,皮毛技术慢慢的积累 总有一天会有收获滴

时间: 2024-10-11 16:14:58

菜鸟学算法--简单的交换和最大公约数算法入门篇的相关文章

使用朴素贝叶斯算法简单实现垃圾邮件过滤之算法介绍实现过程

一.算法介绍https://www.cnblogs.com/love528/p/10125089.html 二.实现过程 实验步骤 (1)收集数据:提供文本文件. (2)准备数据:将文本文件解析成词条向量. (3)分析数据:检查词条确保解析的正确性. (4)训练算法:计算不同的独立特征的条件概率. (5)测试算法:计算错误率. (6)使用算法:构建一个完整的程序对一组文档进行分类. 主要代码解析 (1)    分词 使用正则表达式将邮件文本其划分成一个个单词的形式 import re def t

简单的前端js+ajax 购物车框架(入门篇)

其实,一直想把自己写的一些js给总结下,也许是能力有限不能把它完美结合起来.只能自己默默的看着哪些代码,无能为力. 今天在公司实在没有事做,突然就想到写下商城的购物车的前端框架,当然我这里只有购物车的增删改查,也许写的并不是那么完善,但最重要的是一个入门,也希望js达人给些建议,好让我更上一个台阶. HOHO~~~开始咯: Js: //为了省事,就没写自己的js ajax了 用了jquery的,当然你也可以添加到jquery的扩展方法内,哈哈,我太懒了,所以就写这里了. var _$ = { A

菜鸟学SSH(十三)——Spring容器解析及简单实现

最近一段时间,"容器"两个字一直萦绕在我的耳边,甚至是吃饭.睡觉的时候都在我脑子里蹦来蹦去的.随着这些天一次次的交流.讨论,对于容器的理解也逐渐加深.理论上的东西终归要落实到实践,今天就借助Spring容器实现原理,简单说说吧. 简单的说,Spring就是通过工厂+反射将我们的bean放到它的容器中的,当我们想用某个bean的时候,只需要调用getBean("beanID")方法. 原理简单介绍: Spring容器的原理,其实就是通过解析xml文件,或取到用户配置的

【自考】排序算法-插入、交换、选择、归并排序

碎碎念: 记得当初第一年的时候.接触算法.有那么两个视频.跳舞的.讲的是冒泡排序跟选择排序.当时看了好多遍终于懂了.这次多了一些算法.学起来也还好吧.咱是有基础的人.找到了以前的视频.有的就发了.没找到的就没法.其实算法并不难.绕绕就明白了.先别看代码- - 思维导图 插入排序 从头到尾巴.从第二个开始.向左进行插入.这里说的插入是指作比较.直到比较出比自己小的就插入到他的前面. 例子 1 7 4 8 6 5 插入排序 [1]7 4 8 6 5 [1 7] 4 8 6 5 [1 4 7]  8

跟Alex学Python之- 这年头不会点算法怎以混江湖?

前言 非常欣慰的看到如今越来越多的运维人员也开始学开发了,it's a good sign, 毕竟行业大势不可违,我依然坚信,不出3年,不会开发的运维连工作都找不到,很多人可能依然嗤之以鼻,就像3年前我呼吁做运维的一定要会开发,最好是Python,一大堆脑子进水的小白还跑来跟我争论不会开发也无所谓,说什么开发运维泾渭分明,还说什么做运维shell能玩熟就可以了,现在事实已经狠狠的打了这些人的脸,只想说,各个行业里都有一大群后知后觉.脑子长在屁股上的人,目光短浅,根本看不清行业的大趋势,呵呵,没关

菜鸟学jQuery源码(前言)

前言 相信任何一名前端开发人员或者是前端爱好者都对jQuery不陌生.jQuery简单易用,功能强大,特别是拥有良好的浏览器兼容性,大大降低了前端开发的难度,使得前端开发变得“平易近人起来”.自从本人用了jQuery,顿时感觉到人生再也不是灰色的了,又能够快乐的工作了. 不过在每天码得飞起的同时,我也对jQuery充满好奇,所以也特意的去查了一下资料.现在网上和书店里面有非常多的资料对jQuery源码从各种角度进行解析,大多都是对jQuery进行总结.归纳从上往下的分析.不过本人作为一名刚毕业的

若干排序算法简单汇总(一)

转载请注明出处 http://blog.csdn.net/pony_maggie/article/details/35819279 作者:小马 从题目看,首先不是全部是若干.排序算法很多,我个人的能力也有限,不可能都讲到.另外,是简单汇总,是希望能用最简单的代码,最简短的语言说明问题,不搞太多理论分析. 就像前面说的,排序算法有很多,而且不存在哪一种最不好,哪一种最好这样的说法.根据用途不同选择最适合的就行了.不过仅从时间复杂度来看,基本上有两种,一种是O(n^2), 一种是O(nlogn).

菜鸟学Java(十九)——WEB项目测试好帮手,Maven+Jetty

做WEB开发,测试是一件很费时间的事情.所以我们就应该用更简单.更快捷的方式进行测试.今天就向大家介绍一个轻量级的容器--jetty.j今天说的etty是Maven的一个插件jetty-maven-plugin,与Maven配合起来使用非常的方便,它的配置也非常的简单,下面我们就看看它怎么用吧! 在pom.xml 文件的<project>标签下加入如下代码: <build> <plugins> <plugin> <groupId>org.mort

菜鸟学Laravel(零) 为什么选择Laravel

菜鸟学Laravel(零): 为什么选择Laravel 本人Web方面的菜鸟一枚,突然想想学习PHP开发,就看了一下相关的介绍,Java和PHP语言是目前的主流,因为PHP入门相对较Java容易,因此选择了PHP作为学习的语言,找了几本PHP.Mysql.JavaScript.CSS等方面的知识学了一下,觉得利用PHP开发简单的网站还是非常快速而且方便的,用Smarty开发了一个小网站,发现问题很多,因此萌发了利用其它框架编写网站的想法,看了一下框架占比,给吓到了,框架太多了!选择laravel