C語言如何實現(xiàn)一些算法或者函數(shù)你知道嗎
更新時間:2022年03月01日 15:31:44 作者:cy?Hunter
這篇文章主要為大家詳細(xì)介紹了C語言實現(xiàn)一些算法或者函數(shù),文中示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下,希望能夠給你帶來幫助
1.遞歸二分搜索
#include<bits/stdc++.h> using namespace std; int a[100]; int pos = -1; void binarysearch(int l, int r, int x){ if(l > r)return; else{ int mid = (l+r)/2; if(x == a[mid]) { pos = mid; return; } if(x < a[mid]) return binarysearch(l, mid-1, x); else return binarysearch(mid+1, r, x); } } int main(){ int n; cin>>n; //輸入元素個數(shù) for(int i=0; i<n; i++)cin>>a[i]; sort(a, a+n); binarysearch(0, n-1, 5);//二分搜索 cout<<pos;//輸出找到的位置下標(biāo) return 0; }
結(jié)果示例
2.遞歸歸并排序
3.Ackerman函數(shù)
#include<bits/stdc++.h> using namespace std; long Ackerman(long n, long m){ if(n >= 0 && m >= 0){ if(n == 1 && m == 0)return 2; if(n == 0 && m >= 0)return 1; if(n >= 2 && m == 0)return n+2; if(n >= 1 && m >= 1)return Ackerman(Ackerman(n-1, m), m-1); } } int main(){ long n, m; cin>>n>>m; cout<<Ackerman(n, m); return 0; }
結(jié)果示例
4.Fibonacci數(shù)列
#include<bits/stdc++.h> using namespace std; int fibonacci(int n){ if(n == 1)return 1; else if(n == 2)return 1; else return fibonacci(n-1)+fibonacci(n-2); } int main(){ int n; cin>>n;//返回斐波那契數(shù)列第幾項 cout<<fibonacci(n); return 0; }
結(jié)果示例
5.遞歸求排列
#include<bits/stdc++.h> using namespace std; int a[20], b[20];//a[]為排列的盒子,b[]為判斷元素是否放過的數(shù)組 int n; void perm(int k){//k表示開始放第k個數(shù) if(k == n+1){//當(dāng)k>n時說明第k個數(shù)已經(jīng)放好,已經(jīng)一組排列完畢 for(int i=1; i<=n; i++){ cout<<a[i]<<" "; } cout<<endl; } else{ for(int i=1; i<=n; i++){//1-n個數(shù)各自放入盒子a[]中 if(b[i] == 0){//初始化b[]都為0,為0說明這個數(shù)沒放過 a[k] = i;//第k個數(shù)放入i b[i] = 1;//i放了因此后面不能再放了 perm(k+1);//放第二個數(shù)。 b[i] = 0;//雖然第一次排列放了,但是第二次排列還需要用到。 } } } } int main(){ cin>>n;//排列數(shù)個數(shù) perm(1);//從放第一個數(shù)開始排列 return 0; }
示例結(jié)果
6.求最大公約數(shù)
#include<bits/stdc++.h> using namespace std; int gcd(int a, int b){ return b==0?a:gcd(b, b%a); } int main(){ int a, b; cin>>a>>b; cout<<gcd(a,b); }
示例結(jié)果
7.偶位數(shù)的大整數(shù)乘法
#include<bits/stdc++.h> using namespace std; long mul(long x, long y, long n){ if(x == 0 || y == 0)return 0; else if(n == 1)return x * y; else{ long A = (long)x / pow(10, (long)(n/2)); long B = x - A * pow(10, n/2); long C = (long)y / pow(10, (long)(n/2)); long D = y - C * pow(10, n/2); long AC = mul(A, C, n/2); long BD = mul(B, D, n/2); long A_BD_C = mul((A - B),(D - C), n/2); return AC * pow(10, n) + (A_BD_C + AC + BD)* pow(10, (long)(n/2)) + BD; } } int main(){ long a, b, n, sign; if((a<0 && b>0) || (a>0 && b<0))sign = -1; else sign = 1; cin>>a>>b>>n; cout<<mul(a, b, n) * sign; }
結(jié)果示例
總結(jié)
本篇文章就到這里了,希望能夠給你帶來幫助,也希望您能夠多多關(guān)注腳本之家的更多內(nèi)容!
相關(guān)文章
vector與map的erase()函數(shù)詳細(xì)解析
vector和map都不能將it++寫在for循環(huán)中,而在循環(huán)體內(nèi)erase(it)2013-09-09

C語言中關(guān)于scanf函數(shù)的一些問題詳解
這篇文章主要為大家介紹了C語言中關(guān)于scanf函數(shù)的一些問題,具有一定的參考價值,感興趣的小伙伴們可以參考一下,希望能夠給你帶來幫助
2021-12-12 
FFmpeg獲取網(wǎng)絡(luò)攝像頭數(shù)據(jù)解碼
這篇文章主要為大家詳細(xì)介紹了FFmpeg獲取網(wǎng)絡(luò)攝像頭數(shù)據(jù)解碼,具有一定的參考價值,感興趣的小伙伴們可以參考一下
2019-06-06