關於二分法的小程式,大蝦幫幫忙,一個簡單的小程式 C語言 BF演算法

2022-06-09 10:27:42 字數 1688 閱讀 1352

1樓:匿名使用者

兩個錯誤。

1、你把精確度設為1e-6。注意,float的有效數字只有6位,所以算到小數點後6位時,x1,x2,x的值很有可能就一樣了,那麼x,x1,x2的值將不將變化,而且肯定會大於1e-6,導致死迴圈。

解決方法是把所有資料改成double型。

2、仔細分析一下你的find函式吧,它求得的最後一個根區間有很大可能並不包含一個有效根。

比如我輸入-10 10,那麼,第一個根區間會是-10,-2,那麼第2個區間就成了-2,11,第2個區間並不包含根。

解決方法是在呼叫bin_root前,判斷一下polynomial(bot[i])*polynomial(top[i])<0

另外,你的find函式在生成最後一個根區間時,會出現x2比top1大1的情況。你自己改改吧。

我的**如下:

#include "math.h"

#include "stdio.h"

double polynomial(double x)

//polynomial函式

int find(int *bot,int *top,int bot1,int top1)

bot[count]=x1;

top[count]=x2;

count++;

x1=x2;

x2=x1+1;

}return count;

}//find函式

double bin_root(int bot,int top)

else

x=(x1+x2)/2;

y=polynomial(x);

y1=polynomial(x1);

y2=polynomial(x2);

}return x;

}//二分法求根bin_root函式

void main()}}

2樓:匿名使用者

有難度,建議找專業**~~頂下~順便,收分呵呵

一個二分法搜尋的python小程式,為什麼按回車以後沒有用???

3樓:

沒寫個py指令碼里?你把函式呼叫也寫在函式裡了,所以,你的函式沒有呼叫。注意縮排

一個簡單的小程式 c語言 bf演算法

4樓:靠譜兒媽媽

引用沒問題,就是bf函式錯了。

#include

#include

#include//.h去掉

using namespace std;//名稱空間int bf(char s,char t)else

}if(t[j]=='\0')

return start+1;//start+1,因為陣列從0開始計數

else

return 0;

}int main()

{char s[1000],t[1000];

int start;

printf("輸入主串:\n");

scanf("%s",s);

printf("%s\n",s);

printf("輸入子串: \n ");

scanf("%s",t);

printf("%s\n",t);

start=bf(s,t);

cout<<"主串與子串在主串的第"<

二分法插入排序快速排序歸併排序堆排序的時間複雜度分別

二分法插入排序 複雜度 o nlogn 快速排序 o nlogn 有可能退化歸併排序 o nlogn 比較快堆排序 o nlogn 最穩定的 二分法插入排序 快速排序 歸併排序 堆排序 的時間複雜度分別是多少?二分法插入排序 複雜度 o nlogn 快速排序 o nlogn 有可能退化歸併排序 o ...

二分法查詢最壞情況下需要比較次數,為什麼n次和O(log

後者是演算法複雜度的意思 n次是正確的嗎?應該是log 2 n次才對啊 用二分法查詢最多log2 n 用順序查詢最多是n次 順序查詢需要比較n次,二分法查詢需要比較log n次 在最壞情況下,堆排需要進行比較的次數為nlog2n,為什麼是這樣啊,n是什麼含義,如果n為奇數不就 o n1og2n 在b...

二分法的時間複雜度為olog2n是什麼意思

網頁連結 你可以看看我的上面這個部落格 由於二分查詢每次查詢都是從陣列中間切開查詢,所以每次查詢,剩餘的查詢數為上一次的一半,從下表可以清晰的看出查詢次數與剩餘元素數量對應關係 表 查詢次數及剩餘數 第幾次查詢 剩餘待查詢元素數量 1 n 22 n 2 2 3 n 2 3 k n 2 k 從上表可以...