98資結2(1)答案

看板Grad-ProbAsk作者 (Ken)時間17年前 (2009/03/17 01:39), 編輯推噓5(508)
留言13則, 5人參與, 最新討論串1/1
無聊把程式打一打讓他跑 應該沒打錯才是 考試沒寫就是了 太麻煩的感覺 無聊想對答案可以對 答案: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

03/17 10:40, , 1F
這題不就是用bottom-up建heap嗎?@@"
03/17 10:40, 1F

03/17 11:13, , 2F
跑出來為啥有10 好怪!?
03/17 11:13, 2F

03/17 13:29, , 3F
有人覺得有error嗎?r=5代進去第一次foo的for loop的j=10,
03/17 13:29, 3F

03/17 13:30, , 4F
執行到if(k<=a[j])break;的時候不是會有問題?
03/17 13:30, 4F

03/17 13:31, , 5F
>=
03/17 13:31, 5F

03/17 23:47, , 6F
沒錯..我朋友也有說 好像還有j=9,代到j=18的...
03/17 23:47, 6F

03/18 02:20, , 7F
恩......
03/18 02:20, 7F

03/18 10:10, , 8F
r不會到5吧 4=9/2
03/18 10:10, 8F

03/18 23:03, , 9F
r會到5的 因為i--是在迴圈第一輪後才做
03/18 23:03, 9F

03/18 23:04, , 10F
這題有問題的地方有陣列的index 一下子是1~10
03/18 23:04, 10F

03/18 23:05, , 11F
一下子是0~9
03/18 23:05, 11F

03/18 23:07, , 12F
不過如果他們有注意到 這題應該會送分才是
03/18 23:07, 12F

03/18 23:23, , 13F
k<=n 大概是題目的筆誤吧
03/18 23:23, 13F
文章代碼(AID): #19lexNU9 (Grad-ProbAsk)