博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
PAT1147 Heap
阅读量:6035 次
发布时间:2019-06-20

本文共 1132 字,大约阅读时间需要 3 分钟。

原题链接:

解析:这题应该就是简单的堆模拟,如果看得懂英文题意的话不算难。我的做法利用了二叉树的一个性质,即从上往下从左往右依次为节点编号为0,1,2....,那么第i个节点的左子节点编号为2*i+1,右子节点2*i+2。

我第一次没通过的原因:刚开始我判断循环条件为2*i+2 < n,这样就有个问题,如果2*i+i < n但是2*i+2 > n就漏判了一个2*i+1。

代码实例:

#include
using namespace std;int num[1005];int n,m;bool isMax(){ for(int i = 0;2*i+1 < n;i++){ if(2*i+2 >= n) if(num[i] < num[2*i+1]) return false; if(2*i+2 < n) if(num[i] >= num[2*i+1] && num[i] >= num[2*i+2]); else return false; } return true;}bool isMin(){ for(int i = 0;2*i+1 < n;i++){ if(2*i+2 >= n) if(num[i] > num[2*i+1]) return false; if(2*i+2 < n) if(num[i] <= num[2*i+1] && num[i] <= num[2*i+2]); else return false; } return true;}void Print(int k){ if(k >= n) return; Print(2*k+1); Print(2*k+2); if(k == 0) cout << num[k] << endl; else cout << num[k] << " ";}int main(){ cin >> m >> n; while(m--){ for(int i = 0;i < n;i++) cin >> num[i]; int flag = 0; if(isMax()) flag = 1; if(isMin()) flag = 2; if(flag == 1) cout << "Max Heap" << endl; else if(flag == 2) cout << "Min Heap" << endl; else cout << "Not Heap" << endl; Print(0); } return 0;}

 

转载于:https://www.cnblogs.com/long98/p/10352205.html

你可能感兴趣的文章
编译安装nginx 1.9.15
查看>>
我的友情链接
查看>>
新的开始~~~
查看>>
字符串的扩展
查看>>
存储过程中调用webservice
查看>>
神奇语言 python 初识函数
查看>>
Windows安装Composer出现【Composer Security Warning】警告
查看>>
四 指针与数组 五 函数
查看>>
硬盘空间满了
查看>>
dutacm.club Water Problem(矩阵快速幂)
查看>>
深入JVM内核--GC算法和种类
查看>>
iOS的AssetsLibrary框架访问所有相片
查看>>
MySQLdb的安装
查看>>
读书笔记三
查看>>
数论 - 最小乘法逆元
查看>>
企业架构研究总结(22)——TOGAF架构开发方法(ADM)之信息系统架构阶段
查看>>
接口测试(三)--HTTP协议简介
查看>>
周志华《机器学习》课后答案——第4章.决策树
查看>>
frameset分帧问题
查看>>
特殊样式:ime-mode禁汉字,tabindex焦点
查看>>