菜鳥學演算法 簡單的交換和最大公約數演算法入門篇

2021-09-22 19:14:33 字數 1574 閱讀 5335

工作之後我們大部分的時間實在研究如何如何學習一門語言 如何如何掌握一門技術,但是作為程式設計的本質 資料結構和演算法 我們慢慢的忽略了 。

工作後的很多程式設計師真的沒有大學生一樣的時間 去靜下心來去增加自己的底蘊,這是我深有體會的事情當然我這裡指的是和我有累死感覺的人。

演算法的本質並不是我們程式設計師去創造演算法 而是我們 按照先人創造的演算法思想 用**來實現演算法。

下面開始介紹兩個 簡單的例子 乙個是交換 乙個是最大公約數演算法。

簡單的交換

#include "stdafx.h"

#include /*

我們的目標是

交換abcd的值為bcda 函式 m1 m2

此處**相信都是再小兒科不過的**了,但是小兒科的**實際上也是有小兒科的寫法。

我們在寫**的時候要保證的兩點 高效 快速 最小的損耗 完成功能即可 。

*/int a = 1, b = 2, c = 3, d = 4;

int arr[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* ar**)

下面乙個是 求最大公約數的演算法 歐幾里得演算法

#include "stdafx.h"

//求最大公約數

//演算法歐幾里得演算法的應用

//獲得最大公約數

//現在求ab的最大公約數 既能被a又能被b整除的數字

//如果你不了解 歐幾里得演算法 那麼可能會 迴圈來解決問題 ...那麼很糟糕的

//我們程式設計師的演算法本質 是 拿來數學演算法 思想轉換成** 這就是我們大部分使用演算法的本質 除非你是演算法研究者 那麼 另當別論

//看看這端程式如果你不知道 歐幾里得演算法 衍生的 求最大公約數演算法 你該如何去寫程式?或許是多個迴圈吧,~

int greatestcommondivision(int a, int b)

int r = 0;

//取餘數 如果餘數等於0 那麼 最大公約數既為 當前a

while ((r = a%b) != 0)

//等於0就退出了

return b;

}int _tmain(int argc, char**ar**)

簡單的入門就到這裡 ,皮毛技術慢慢的積累 總有一天會有收穫滴

最大公約數簡便演算法 求最大公約數的4種演算法

for z 0 z 10000000 z 迴圈只是為了增加程式的執行時間,讓我們體會演算法的時間複雜度。演算法一 短除法 想法,採用短除法找出2個數的所有公約數,將這些公因子相乘,結果就是2個數的最大公約數。找公因子,只能使用蠻力法 include include void main int m 2...

高效的最大公約數演算法

最大公約數的演算法一般就是輾轉相除法了。直觀易懂。但是取模運算卻是很耗時的。看 package a public class copyoftest1 求ab的最大公約 輾轉相除法 public static int fun1 int a,int b 求ab的最大公約數 public static i...

最大公約數的3種演算法

最大公約數的3種演算法 前言 關於最大公倍數,其本質是輾轉相除法,又名歐幾里德演算法 設兩數為a b a b 求a和b最大公約數 a,b 的步驟如下 用a除以b,得a b q.r1 0 r1 若r1 0,則 a,b b 若r1 0,則再用b除以r1,得b r1 q.r2 0 r2 若r2 0,則 a...