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 從上表可以...