首页 > 代码库 > POJ1068-Parencodings
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\n", stack[top]); sum = 0; for(_j=stack[top]; _j<=_i; _j++){ sum += num[_j]; } printf("%d ", sum); top--; } } printf("\n"); } return 0;}
POJ1068-Parencodings
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。