題目:
1.按題目要求先將傳進來的數按順序插入,每插入乙個新的元素就要從下向上調整,邊插入邊調整,不能全部插入後再從上到下調整。
2.得到調整好的堆後,對輸入的指令字串進行分析,取出其中的數字,並判斷是題目所給的四類命題的哪一類
在這裡我採用按空格分幾個部分輸入字串的形式獲取字串中的數字
例如輸入:
24 is the root
26 and 23 are siblings
46 is the parent of 23
23 is a child of 10
先輸入第乙個數字, 然後判斷字串是否為and ,是就是命題二的形式,則按" %d are siblings",輸入即可拿到數字
如果不是 則判斷下乙個字串,如果是"a"則是命題四的形勢,按" child of %d"輸入拿到數字,以此類推
3.根據座標位置,判斷命題是否正確
`x is the root ,判斷x是不是根節點,與a[0]即可
`x and y are siblings ,判斷x和y是不是兄弟,即判斷x和y是否有同乙個父親,關係為:(posx-1)/2 ==(posy-1)/2
`x is the parent of y ,x是y的父結點,關係為: (posy-1)/2==posx
`x is a child of y ,x是y的子女,關係為:(posy*2+1)==posx || (posy*2+2)==posx
**如下:
#include#include/*
void siftdown(int a,int start,int end)
if(x<=a[j])
a[i]=a[j];
i=j;
j=2*i+1;
} a[i]=x;
}void heapsort(int a,int start,int end)
}*/void siftup(int a,int start)
else
i=j;
j=(i-1)/2;
} a[i]=x;
}void find(int a,int n,int key1,int key2,int* pos1,int* pos2)
if(a[i]==key2)
if(*pos1閱讀題目不仔細,沒有邊插入邊排序,搞了我快一天的時間
2.再者,以後分析輸入字串,就用按空格分段輸入,這樣容易理解,只要縝密就不會出錯。
3.話不多說,我趕緊去把堆排序再碼一遍
問題:1.其實這裡我有個疑問,用siftdown()調整和siftup()調整得到的堆會不一樣嗎?
2.題目所給的值應該都是互不相同的把?
L2 012 關於堆的判斷
題目如下 時間限制 400 ms 記憶體限制 65536 kb 長度限制 8000 b 判題程式 standard 作者 陳越 將一系列給定數字順序插入乙個初始為空的小頂堆h。隨後判斷一系列相關命題是否為真。命題分下列幾種 輸入格式 每組測試第1行包含2個正整數n 1000 和m 20 分別是插入元...
L2 012 關於堆的判斷
時間限制 400 ms 記憶體限制 65536 kb 長度限制 8000 b 判題程式 standard 作者 陳越 將一系列給定數字順序插入乙個初始為空的小頂堆h。隨後判斷一系列相關命題是否為真。命題分下列幾種 輸入格式 每組測試第1行包含2個正整數n 1000 和m 20 分別是插入元素的個數 ...
L2 012 關於堆的判斷
時間限制 400 ms 記憶體限制 65536 kb 長度限制 8000 b 判題程式 standard 作者 陳越 將一系列給定數字順序插入乙個初始為空的小頂堆h。隨後判斷一系列相關命題是否為真。命題分下列幾種 輸入格式 每組測試第1行包含2個正整數n 1000 和m 20 分別是插入元素的個數 ...