看板 Grad-ProbAsk 關於我們 聯絡資訊
無聊把程式打一打讓他跑 應該沒打錯才是 考試沒寫就是了 太麻煩的感覺 無聊想對答案可以對 答案:4 15 12 9 8 10 5 6 3 1 code如下: #include<stdio.h> #include<stdlib.h> void foo(int *a,int r,int n) { int k=a[r]; int j; for (j=2*r;k<=n;j*=2) { if (j<n) if (a[j]<a[j+1]) j++; if (k>=a[j]) break; a[j/2]=a[j]; } a[j/2]=k; } int b[10]={4,7,1,5,15,12,9,6,3,8}; int n=10; int main(void) { int i; for (i=n/2;i>=1;i--) foo(b,i,n); for (i=0;i<10;i++) printf("%d\t",b[i]); system("pause"); } -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 118.161.148.235
silentrain:這題不就是用bottom-up建heap嗎?@@" 03/17 10:40
ken110194:跑出來為啥有10 好怪!? 03/17 11:13
gabelle:有人覺得有error嗎?r=5代進去第一次foo的for loop的j=10, 03/17 13:29
gabelle:執行到if(k<=a[j])break;的時候不是會有問題? 03/17 13:30
gabelle: >= 03/17 13:31
ken110194:沒錯..我朋友也有說 好像還有j=9,代到j=18的... 03/17 23:47
e80276:恩...... 03/18 02:20
silentrain:r不會到5吧 4=9/2 03/18 10:10
sunneo:r會到5的 因為i--是在迴圈第一輪後才做 03/18 23:03
sunneo:這題有問題的地方有陣列的index 一下子是1~10 03/18 23:04
sunneo:一下子是0~9 03/18 23:05
sunneo:不過如果他們有注意到 這題應該會送分才是 03/18 23:07
sunneo:k<=n 大概是題目的筆誤吧 03/18 23:23