作者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