堆的判断(1098)
编写程序判断以下给出的整数序列是否为最小堆。
Description
第一行是元素的个数n;
第二行是n个整数序列。
Input
如果是小根堆,输出Yes,否者输出No。
Output
1
2
3
|
10
100 86 48 73 35 39 42 57 66 21
|
Sample Input
1
|
No
|
#include<iostream> #include<algorithm> #include<cmath> #include<cstring> using namespace std; bool Judge(int a[],int n) { int i; for (i = 1; i < ceil(n / 2);i++) if ((a[i]>a[i * 2] && 2 * i<n) || (a[i]>a[i * 2 + 1] && (2 * i + 1) < n)) return false; return true; } int main() { int i, n, a[100]; cin >> n; for(i = 1; i <= n; i++) cin >> a[i]; if (Judge(a, n)) cout << "Yes"; else cout << "No"; }
你若不努力,那么你便没有收获。