7-13 關於堆的判斷 (25分)
輸入格式:每組測試第1行包含2個正整數n(≤ 1000)和m(≤ 20),分別是插入元素的個數、以及需要判斷的命題數。下一行給出區間[−10000,10000]內的n個要被插入乙個初始為空的小頂堆的整數。之後m行,每行給出乙個命題。題目保證命題中的結點鍵值都是存在的。
輸出格式:
對輸入的每個命題,如果其為真,則在一行中輸出t,否則輸出f。
輸入樣例:
5 4輸出樣例:46 23 26 24 10
24 is the root
26 and 23 are siblings
46 is the parent of 23
23 is a child of 10
ftf首先吸取堆的操作那道題的教訓,它屬於新增了全部元素後再調整的型別。然後就是命題的讀入和判斷這兩個部分了。t
需要注意的是這個判斷條件必須是充分的,比如判斷兄弟結點siblings。兄弟結點的下標值一定相差1,但結點的下標值相差1的結點不一定是兄弟結點,可以減一除二判等來看雙親是否相同。
#include
#include
#include
#include
#include
using
namespace std;
intinputstr
(char
*arr)
;//讀入乙個c風格的字串行,'\n'作為終止讀入的標誌
//返回讀入字串的長度
intfind_number
(char
* str,
int i)
;//從字元陣列下標為i的元素開始找一串數字
//序列並返回這個數,可以是以'+'或者'-'開頭的任意長度的數字序列
void
judge_expreesion
(char
* view, vector<
int> first_heap)
;//判斷命題(每個字串行)對於最小堆描述的真假
intmain()
//將一系列給定數字順序插入乙個初始為空的最小堆
getchar()
;//吃掉scanf留下的'\n'字元
char expressions[20]
[48];
//用來儲存命題的字元陣列
//逐個判斷所給命題
for(
int i =
0; i < expressions_num; i++
)return0;
}int
inputstr
(char
*arr)
return i;
}int
find_number
(char
* str,
int i)
for(j = i + number_length -
1; j >= i; j--
)//計算這個數字序列
//對應數字的值
}else
//不帶'+'或'-'的數字
for(j = i + number_length -
1; j >= i; j--
)//計算這個數字序列
//對應數字的值
number *=-
1;}return number;
}void
judge_expreesion
(char
* view, vector<
int> first_heap)if(
strstr
(view,
"siblings")!=
null
)//與siblings兄弟相關的命題if(
strstr
(view,
"parent")!=
null
)//與parent雙親特性相關的命題if(
strstr
(view,
"child")!=
null
)//與child孩子特性相關的命題
}
PTA 7 38 關於堆的判斷
題目重述 輸入格式 每組測試第1行包含2個正整數n 1000 和m 20 分別是插入元素的個數 以及需要判斷的命題數。下一行給出區間 10000,10000 內的n個要被插入乙個初始為空的小頂堆的整數。之後m行,每行給出乙個命題。題目保證命題中的結點鍵值都是存在的。輸出格式 對輸入的每個命題,如果其...
PTA 關於堆的判斷(25分)
一 堆的概念 堆是完全二叉樹。參考 4條訊息 資料結構堆的概念 堆排序的思想以及演算法過程詳解 lifegoeson csdn部落格 堆的概念 二 堆的初始化 一般給出乙個陣列,需要乙個乙個數的新增到堆,而堆也分為大頂堆和小頂堆,此時需要了解堆的上調和下調。參考 二 例題 l2 012 關於堆的判斷...
關於堆的判斷
將一系列給定數字順序插入乙個初始為空的小頂堆h。隨後判斷一系列相關命題是否為真。命題分下列幾種 每組測試第1行包含2個正整數n 1000 和m 20 分別是插入元素的個數 以及需要判斷的命題數。下一行給出區間 10000,10000 內的n個要被插入乙個初始為空的小頂堆的整數。之後m行,每行給出乙個...