zoukankan      html  css  js  c++  java
  • PAT1147 Heap

    原题链接:PAT1147

    解析:这题应该就是简单的堆模拟,如果看得懂英文题意的话不算难。我的做法利用了二叉树的一个性质,即从上往下从左往右依次为节点编号为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<iostream>
    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;
    }
  • 相关阅读:
    struts2_20140720
    使用jsp生成验证码
    JAVA笔记1-00
    Myeclipse 2014配置SVN详细图解
    排查IDEA 全局搜索快捷键Ctrl +Shift+F不起作用的原因和解决方法
    linux,java.net.UnknownHostException:XXX:XXX: Name or service not known
    mac使用技巧
    谈创业
    小白3步完成替换tomcat域名
    linux下yum安装redis以及使用
  • 原文地址:https://www.cnblogs.com/long98/p/10352205.html
Copyright © 2011-2022 走看看