在計算機的考試中,常常會遇到演算法的題目,這讓很多初學者傷透了腦筋,現在我在此總結常見的基本演算法,希望能起到一些幫助。
1.資料分離:
將乙個高位數的個十百千等位分離出來,演算法很簡單,也很基礎。如513,百位為5,十位為1,個位為3,如何讓電腦知曉這些資訊呢?
處理方法:
-分離個位: n%10
-分離十位: n/10%10
-分離白位: n/100%10
....
迴圈處理常用語句
while(n)
素數的判定:
求<=n的素數
因為2是最小的素數,故從2開始,依次乙個乙個地判斷整數是否能被不是1和自己的數整除,因為當j>i/2或根號i
時,便不會再有i的因數,故到i/2或根號i就可以了。
for(i=2;i<=n;i++)
3.迴圈累加,累乘,累除等
常用演算法
for(i=1;i<=n;i++)
迴圈體語句; /*可以是累加、累乘、累除的綜合使用*/
迴圈體中常用:
-累加:s=s+i;
-累乘:s=s*i;
-累除:s=s/i;
4.排序
——氣泡排序:
sort()函式讀入陣列,然後按公升序排序。
直接看例子:
void sort(int *a,int n)
}
——選擇排序:
選擇排序也有二重迴圈結構。
輸入陣列,按
void sort(int *a,int n)
}
5.牛頓迭代法:
牛頓迭代法又稱牛頓切線法:先任意設定乙個與真實的根接近的值x0作為第一次近似根,由x0求出f(x0),過(x0,f(x0))點做f(x)的切線,交x軸於x1,把它作為第二次近似根,再由x1求出f(x1),過(x1,f(x1))點做f(x)的切線,交x軸於x2,……如此繼續下去,直到足夠接近(比如|x- x0|<1e-6時)真正的根x*為止。
例如,用牛頓迭代法求下列方程在1.5附近的根:2x3-4x2+3x-6=0。
float x,x0,f,f1;x=1.5;
do
while(fabs(x-x0)>=1e-5);
printf ("%f\n",x);
6.二分法查詢根
具體演算法如下:
(1)輸入x1和x2的值。
(2)求f(x1)和f(x2)。
(3)如果f(x1)和f(x2)同號說明在[x1, x2] 內無實根,返回步驟(1),重新輸入x1和x2的值;若f(x1)和f(x2)不同號,則在區間[x1, x2]內必有乙個實根,執行步驟(4)。
(4)求x1和x2的中點:x0=(x1+ x2)/2。
(5)求f(x0)。
(6)判斷f(x0)與f(x1)是否同號。
①如果同號,則應在[x0, x2]中尋找根,此時x1已不起作用,用x0代替x1,用f(x0)代替f(x1)。
②如果不同號,則應在[x1, x0]中尋找根,此時x2已不起作用,用x0代替x2,用f(x0)代替f(x2)。
(7)判斷f(x0)的絕對值是否小於某一指定的值(例如10-5)。若不小於10-5,則返回步驟(4)重複執行步驟(4)、(5)、(6);否則執行步驟(8)。
(8)輸出x0的值,它就是所求出的近似根。
例如,用二分法求方程2x3-4x2+3x-6=0在(-10,10)之間的根。
#include "math.h"
main()
while(fx1*fx2>0);
do
else
}
while(fabs(fx0)>1e-5);
printf("%f\n",x0);}
Oracle初學者必知的100個問題 3
51.如何將小表放入keep池中?alter table storage buffer pool keep 52.如何檢查是否安裝了某個patch?check that orainventory 53.如何使select語句使查詢結果自動生成序號?select rownum,col from tab...
Oracle初學者必知的100個問題 4
71.核心引數的應用?shmmax 含義 這個設定並不決定究竟oracle資料庫或者作業系統使用多少物理記憶體,只決定 了最多可以使用的記憶體數目。這個設定也不影響作業系統的核心資源。設定方法 0.5 物理記憶體 例子 set shmsys shminfo shmmax 10485760 shmmi...
10 個 Python 初學者必知編碼小技巧
技巧 1 字串翻轉 a codementor print reverse is a 1 翻轉後的結果為 rotnemedoc技巧 2矩陣轉置 mat 1,2,3 4,5,6 zip mat 1,4 2,5 3,6 技巧 3a 1,2,3 將列表中的三個元素分拆成三個變數 a 1,2,3 x,y,z ...