#include
float search(float a,float mid,float high,float low,int num[]);
int main(){
int num[10]={2,5,13,15,25,30,46,78,84,90};
char name[10][10]={"Owen","Jane","Roger","Wallance","Howard","Jeffery","Martin","Kevin","Francis","John"};
float mid, l=0,r=10,result,i=0;
while(1){
scanf("%d",&i);
if(i=0){
break;
}
result=search(i,mid,r,l,num);
if(result=-1){
printf("%s\n",name[mid]);
}
else{
printf("no found");
}
}
return 0;
}
float search(float a,float midden,float high,float low,int num[])
{
while(a>0){
midden = (high+low)/2;
if(a==num[midden]){
return midden;
}
else if(a>num[midden]){
low=midden;
}
else if(a
}
}
return -1;
}
為啥不能跑呢 這是二元的
2007-01-10 11:02:58 · 1 個解答 · 發問者 Xue 1 in 電腦與網際網路 ➔ 程式設計
不是本來就是要判斷妳所輸入的字 A 了嗎.....MID不是隨條件要更改才能搜尋ㄇ
2007-01-11 08:19:04 · update #1
MID有傳沒傳應該都無所謂吧....意思好像都一樣@@"
2007-01-11 08:20:40 · update #2
#include
2007-01-11 08:21:14 · update #3
妳的問題三我看某@@"
2007-01-11 10:34:04 · update #4
IF 裡面!i 是什麼一ㄙㄚ@@"
2007-01-11 10:36:24 · update #5
還有~~~~~
為啥我用if(i=0) 它就跑不出來ㄚ....是因為判斷虛實嗎
還有~~~~~SEARCH裡面 的WHILE終止條件位啥不用high>lowㄋ
2007-01-11 10:43:06 · update #6
對了,search裡,while 的上面要加上一列:
if (a==num[lo]) return lo; 這句是要做啥呢
那麼 if (a==num[hi]) return hi; 呢@@"
妳最後一個說的 會啥會轉不出來呢 是因為 (1 0)/2 =0.5 在INT里等於0ㄇ
2007-01-12 15:20:34 · update #7
我打出來就是這個字 SORRY ㄏㄏ
2007-01-14 17:52:22 · update #8
#include
#include
int search(int a, int hi, int lo, int num[])
{ int mid;
while (hi > lo+1)
{ mid = (hi+lo) /2;
if (a==num[mid]) return mid;
else if (a> num[mid]) lo = mid;
else if (a< num[mid]) hi = mid;
}
return -1;
}
int main()
{ int num[10]={2,5,13,15,25,30,46,78,84,90};
int l=0, r=10, result, i;
char name[][10]={"Owen", "Jane", "Roger", "Wallance", "Howard", "Jeffery", "Martin", "Kevin", "Francis", "John"};
while(1)
{ scanf("%d", &i);
if(!i) break;
result = search(i, r, l, num);
if(result!=-1) printf("%s\\n", name[result]);
else printf("not found\\n");
}
system("pause");
return 0;
}
0. midden 不必要傳。
1. 這題沒必要用到 float
2. float 有誤差,就算你其它的都對了,還要處理誤差
3. 另一個主要錯誤,在你的 search( )裡:
你改了 midden 卻判斷 a!
2007-01-12 00:08:45 補充:
你的A永遠 > 0 ,用 while (A>0) 怎麼也出不來。
傳不傳 midden: 沒錯啊,不然我為什給它編號 0,而且寫
不〝必要〞傳,不是寫
不〝可以〞傳。
傳了程式不會錯,只是會慢一些。
stdlib.h 是給 system( ) 用的。
system("pause") 是在要程式等一下按鍵。
圖形幕下,程式一跑完,視窗就關了!看不到執行結果。
為方便人看到結果,請等人按一下鍵再結束程式。
2007-01-12 00:09:09 補充:
雖然你的 A 是由 midden 來決定它的值,但 A永遠 > 0,所以你 while 的判斷永遠成立,程式永遠在 while 裡轉不出來。
if (!i) 是 if (i==0) 的簡寫,看 compiler,不一定哪個較快。
在 C 裡,判斷是 == ,設定值是 =
if (i=0) 是說:把 i 設一個值(那值剛好是0),然後
如果 i 的值不是 0(偏偏你的剛好就是 0 )
2007-01-12 00:09:15 補充:
hi, lo的新值由 mid 而來,當hi=lo 1而A>num[lo]時,會永遠轉不出來。如:
hi = 1, lo = 0, A = 3
對了,search裡,while 的上面要加上一列:
if (a==num[lo]) return lo;
2007-01-12 23:15:28 補充:
每個演算法都很有可能在邊界上出漏洞!
這個演算法在 a == 最低值 時會有漏洞,但 a == 最高值 時沒。
設計好一個演算法,最基本的,就是要把所有的 邊界 都考慮/測試過。
mid = (0 1)/2 = 0;
∵3 = a < num[mid] = 2
∴lo = mid = 0
hi 永遠是 1, lo 永遠是 0
掛了!
2007-01-12 23:15:35 補充:
題外話:
我個人不支持用〝妳〞字!
1. 中文的〝她〞是後來看到英文的 she 才〝發明〞的。
2. 英文的〝你〞沒有性別之分。
3. 我是男的女的,還需要你來告訴我?(這是英文沒有〝妳〞的原因。)
說不定我是男扮女裝 或 女扮男裝,你被我騙了呢!!
4. 妳是嬭的簡寫。而,嬭是母親的意思!
提供你做參考。
2007-01-15 08:24:17 補充:
沒關係,我只是個人不支持而已。
不會因為這樣就把你列入黑五類!!!:D
2007-01-10 19:43:27 · answer #1 · answered by ? 7 · 0⤊ 0⤋