• POJ1068-Parencodings


      这个题主要考的对栈的操作,题目的意思是:有一组由小括号组成的队列S,P(i)表示当前队列中第i个右括号前面的左括号的个数,W(i)表示左括号和右括号配对成功的里面的右括号的个数(包括当前的左右括号)。要求是:输入P的值,计算输出W的值。

      我的思路是:根据P的输入值计算出当前的队列S,左括号用0表示,右括号用1表示,然后用栈计算成对的括号的位置start和end,最后计算start和end之间的右括号的数量(包括end)

    #include "stdio.h"
    #include "math.h"
    #include "string.h"
    #include "stdlib.h"
    
    int main(int argc, char const *argv[])
    {
    	int _i, _j, _k, start, n, m, t, sum, data[25], num[225];
    	int stack[225], top;
    	scanf("%d", &t);
    	while(t--)
    	{
    		scanf("%d", &n);
    		data[0]=0, top=-1;
    		for(_i=1; _i<=n; _i++){
    			scanf("%d", &data[_i]);
    		}
    		_i=1, _j=0, start=0;
    		while(_i<=n){
    			_k = data[_i]-data[_i-1];
    			for(_j=start; _j<start+_k; _j++){
    				num[_j] = 0;
    			}
    			num[_j] = 1;
    			start += _k+1;
    			_i++;
    		}
    		for(_i=0; _i<start; _i++){
    			if(num[_i]==0){
    				top++;
    				stack[top] = _i;
    			}else if(num[_i]==1){
    				// printf("%d
    ", stack[top]);
    				sum = 0;
    				for(_j=stack[top]; _j<=_i; _j++){
    					sum += num[_j];
    				}
    				printf("%d ", sum);
    				top--;
    			}
    		}
    		printf("
    ");
    	}
    	return 0;
    }
    
  • 相关阅读:
    用简单的方法解决问题
    记一次调试
    工作笔记还是蛮有用
    35岁往上做什么
    2013年个人总结
    一个C++宏定义与枚举定义重复的编译错误
    动态库的麻烦之处
    谈谈软件项目的dependency
    创建pathing jar
    谈谈patch strategy
  • 原文地址:https://www.cnblogs.com/xumengxuan/p/3984041.html
Copyright © 2020-2023  润新知