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;
    }
  • 相关阅读:
    PHP preg_replace_callback_array() 函数
    PHP preg_quote() 函数
    PHP preg_match() 函数
    SqlHelper工具类
    ArrayListd的长度问题
    事务
    Socket通信
    时间戳,产生随机数
    背景大小 | background-size (Backgrounds & Borders)
    背景图片位置 | background-position (Backgrounds & Borders)
  • 原文地址:https://www.cnblogs.com/long98/p/10352205.html
Copyright © 2011-2022 走看看