新手級基礎演算法擴充套件(持續更新)

2021-10-14 02:47:41 字數 4084 閱讀 3312

計算從1到n的階乘之和

用*畫菱形

利用陣列判斷素數

選擇排序

n*n魔方陣

二分查詢法/折半查詢法

二維陣列行列互換

氣泡排序

進製轉換(十六進製制轉十進位制)

調換數字

閏年的概念:能被四整除且不能被一百整除的年份,或能被一百整除的同時也能被四百整除的年份是閏年。

if

(year %4==

0&& year %

100!=

0|| year %

100==

0&& year %

400==0)

printf

("閏年\n");

else

printf

("不是閏年\n"

);

%為第三優先順序,!=和==是第七優先順序,&&是第十一優先順序,||是第十二優先順序,結合方向都為自左向右,判斷條件沒有問題可正常執行。

定理:

兩個整數的最大公約數等於其中較小的那個數和兩數相除餘數的最大公約數。

int n,m,temp;

scanf

("%d %d"

,&n,

&m);

if(n < m)

//讓最大的當除數

while

(m !=0)

//當餘數不為0時

printf

("%d"

,n);

相當於一條n%m=temp的式子,當temp不為0時數值都向左移,原本的除數不要,然後騰出餘數的位置。

·最小公倍數等於n*m/最大公約數

基線(邊界)條件:num>1。遞迴公式:add(num-1) * num。

long

long

add(

int num)

intmain()

int num;

long

long result=1;

scanf

("%d"

,&num)

;for

(int i =

1; i <= num; i++

)printf

("%lld"

, result)

;}

靜態變數只定義一次,函式呼叫結束後值保留,且生存期為從程式開始到程式結束。

long

long

add(

int num)

else

return result;

}int

main()

long

long

add(

int num)

long

long

sum(

int num)

intmain()

int num;

long

long result =

0,multi=1;

scanf

("%d"

,&num)

;for

(int i =

1; i <= num; i++

)printf

("%lld"

, result)

;

主要是舉個例子介紹利用絕對值減少**行數。

for

(int k =3;

abs(k)

<=

3;k--

)

不採用遍歷判斷該數前的所有數來判斷是否是素數。

int a[

100]

,i;for

( i =

1; i <=

100; i++

)a[i]

= i;

a[1]=

0;for(i =

2; i <

sqrt

(100

); i++)}

}

思想:每次都把序列中未排序的乙個作為最值,第乙個元素後的每個元素都和最值比較,符合條件則調換位置並重新整理最值。

int a[5]

=,max;

for(

int i =

0; i <

5; i++)}

}

魔方陣排列規律:

·1放在第一行中間一列。

·從2開始直到n*n,每個數都比前乙個數行數-1,列數+1。

·若上乙個數行數為1,則下乙個數行數為n,列數為上乙個數列數+1。

·若上乙個數列數為n,則下乙個數列數為1,行數為上乙個數行數-1。

·若按上述規則確定的位置上有數或上乙個數是第一行第n列,則把下乙個數放在上乙個數的下面一行且同列。

int square[15]

[15], i, j, k, p=

1, n;

while

(p ==1)

j = n /2+

1;//中間列

i =1;

square[1]

[j]=1;

for(k =

2; k <= n * n; k++

)else

if(square[i]

[j]==

0)square[i]

[j]= k;

else

//與上面同理

}for

(i =

1; i <= n; i++

)//輸出魔方陣

}else p =0;

}

使用條件:列表是有序的。

思想:每次都檢查中間元素知道搜尋區間為空時結束查詢。

例題:有15個從大到小順序排列的數存放在陣列中,輸入乙個數,輸出其排在第幾位。

#define n 15

intmain()

;scanf

("%d"

,&n)

;while

(left <= right)

//因為mid已經檢查過所以邊界可不包含mid

else}if

(judge ==0)

printf

("not found");

}

注意:判斷邊界時的條件不可以是left核心**:

temp=array[i]

[j];

array[i]

[j]=array[j]

[i];

array[j]

[i]=temp;

思想:相鄰兩個數比較,符合條件則交換位置。

缺點:有可能在排序好後還會繼續進行比較,會耗費時間。

#define n 12

intmain()

;for

(int i =

0; i < n-

1; i++

)//n個元素只需要跑n-1遍,最後乙個數之後已經沒有數可以比較了}}

}

此處先預設輸入的數字符合十六進製制規範。

char c;

int n=0;

c =getchar()

;while

(c!=

'\n'

)printf

("%d"

, n)

;

由於此方法從最高位開始計算所以才需要每次都讓原來的n乘上16,最高位數字應為16的(位數-1)次方。

題目:輸入10個整數,先將其中最小的數與第乙個數調換,再將最大的數與最後乙個數調換。(使用指標法)

·此題要注意如果最大值為第乙個數時,經過最小值與第乙個數調換後,此時最小值的指標指向的值為最大值,最大值的指標指向的值為最小值。若要進行最大的數與最後乙個數調換必須先把此時min指標的位址給max。

DataWorks新手引導 持續更新

a dataworks還未採用這種授權方式哈!dataworks給子賬號使用的流程是 主賬號建立專案 主賬號新建子賬號 將子賬號加入專案並賦予角色 子賬號登入及更新個人資訊 注 主賬號新建子賬號時,建立ak這一步的時候,ak一定要儲存好,不然子賬號在更新個人資訊的時候,還需要主賬號重新去建立一次ak...

Bazel基礎 持續更新

bazel是google開發的,用來代替make的乙個自動化構建工具。相對於用makefile,bazel構建速度更快,而且可以識別改動過的 modified 構建時,沒有改動的 不會重新構建,而是使用之前構建過的。有改動的部分會重新構建。這也是它更快的原因。而且還支援遠端 remote 構建。可以...

PBFT演算法 持續更新

bft是區塊鏈共識演算法中,需要解決的乙個核心問題。以位元幣和以太訪為代表的pow,eos為代表的dpos,以及今後以太訪逐漸替換的共識演算法pos,這些都是公鏈演算法,解決的是共識節點眾多情況下的bft 而pbft是在聯盟鏈共識節點較少的情況下bft的一種解決方案。pbft演算法由於每個副本節點都...