作者ken110194 (Ken)
看板Grad-ProbAsk
標題98資結2(1)答案
時間Tue Mar 17 01:39:34 2009
無聊把程式打一打讓他跑 應該沒打錯才是
考試沒寫就是了 太麻煩的感覺 無聊想對答案可以對
答案: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
1F:推 silentrain:這題不就是用bottom-up建heap嗎?@@" 03/17 10:40
2F:→ ken110194:跑出來為啥有10 好怪!? 03/17 11:13
3F:推 gabelle:有人覺得有error嗎?r=5代進去第一次foo的for loop的j=10, 03/17 13:29
4F:→ gabelle:執行到if(k<=a[j])break;的時候不是會有問題? 03/17 13:30
5F:→ gabelle: >= 03/17 13:31
6F:→ ken110194:沒錯..我朋友也有說 好像還有j=9,代到j=18的... 03/17 23:47
7F:推 e80276:恩...... 03/18 02:20
8F:推 silentrain:r不會到5吧 4=9/2 03/18 10:10
9F:推 sunneo:r會到5的 因為i--是在迴圈第一輪後才做 03/18 23:03
10F:→ sunneo:這題有問題的地方有陣列的index 一下子是1~10 03/18 23:04
11F:→ sunneo:一下子是0~9 03/18 23:05
12F:→ sunneo:不過如果他們有注意到 這題應該會送分才是 03/18 23:07
13F:→ sunneo:k<=n 大概是題目的筆誤吧 03/18 23:23