1. 程式人生 > >括號配對問題--一道ACM線上測試題

括號配對問題--一道ACM線上測試題

今天在南陽理工學院的線上ACM測試上做了一道題,簡直弱爆了。。。請看原題:

描述 現在,有一行括號序列,請你檢查這行括號是否配對。
輸入
第一行輸入一個數N(0<N<=100),表示有N組測試資料。後面的N行輸入多組輸入資料,每組輸入資料都是一個字串S(S的長度小於10000,且S不是空串),測試資料組數少於5組。資料保證S中只含有"[","]","(",")"四種字元
輸出
每組輸入資料的輸出佔一行,如果該字串中所含的括號是配對的,則輸出Yes,如果不配對則輸出No
樣例輸入
3
[(])
(])
([[]()])
樣例輸出
No
No
Yes

我的解:

#include <stdio.h>
#include <string.h>

int Peidui(char *p)
{
 int xx,yy;
 char *ptmp;
 ptmp=p;
 while( *ptmp !='\0')
 {
  xx=yy=0;
  if( *ptmp == '(' )
  {
   xx=1;
  }
  else if( *ptmp == '[')
  {
   yy=1;
  }
  else return -1;
  if(xx)
  {
   while((*(++ptmp) !='\0') && (xx != 0))
   {
    if(*ptmp == '(')
     xx++;
    if(*ptmp == '[')
     yy++;
    if(*ptmp == ')')
     {
      xx--;
      if(xx<0)
       return -1;
     }
     
    if(*ptmp == ']')
     {
      yy--;
      if(yy<0)
       return -1;
     }
   }
   if(yy)
   {
    return -1;
   }
  }
  if(yy)
  {
   while((*(++ptmp) !='\0')&&(yy != 0))
   {
    if(*ptmp == '(')
     xx++;
    if(*ptmp == '[')
     yy++;
    if(*ptmp == ')')
     {
      xx--;
      if(xx<0)
       return -1;
     }
    if(*ptmp == ']')
     {
      yy--;
      if(yy<0)
       return -1;
     }
   }
   if(xx)
   {
    return -1;
   }
  }
 }
 return 0;
 
}

int main()
{
 int testNum,res,i=0,j=0;
 int x=0,y=0,len;
 char testData[10010];
 scanf("%d",&testNum);
 if((testNum<=0) || (testNum>100))
  return 0;
 for(i=0;i<testNum;i++)
 {
  scanf("%s",testData); 
  len=strlen(testData);
  if((len>=10000) && (len==0))
  {
   i--;
   continue;
  }
  j=0;
  while(testData[j] !='\0')
  {
   switch(testData[j])
   {
    case '(':x++;break;
    case ')':x--;break;
    case '[':y++;break;
    case ']':y--;break;
    //default:return 0;
   }
   j++;
  }
  if(x==0 && y==0)
  {
   res=Peidui(testData);
   if(res==0)
    printf("Yes\n");
   else
    printf("No\n");
  }
  else 
   printf("No\n");
  x=y=0;
 }
 return 0;
}


相關推薦

括號配對問題--一道ACM線上測試題

今天在南陽理工學院的線上ACM測試上做了一道題,簡直弱爆了。。。請看原題: 描述 現在,有一行括號序列,請你檢查這行括號是否配對。 輸入第一行輸入一個數N(0<N<=100),表示有N組測試資料。後面的N行輸入多組輸入資料,每組輸入資料都是一個字串S(S的長度

ACM 括號配對問題

括號配對問題描述現在,有一行括號序列,請你檢查這行括號是否配對。輸入第一行輸入一個數N(0<N<=100),表示有N組測試資料。後面的N行輸入多組輸入資料,每組輸入資料都是一個字串S(S的長度小於10000,且S不是空串),測試資料組數少於5組。資料保證S中只

括號配對問題 (一道OJ題目)

括號配對問題時間限制:3000 ms  |  記憶體限制:65535 KB難度:3描述現在,有一行括號序列,請你檢查這行括號是否配對。輸入第一行輸入一個數N(0<N<=100),表示有N組測試資料。後面的N行輸入多組輸入資料,每組輸入資料都是一個字串S(S的長度小

ACM-括號配對問題

題目 括號配對問題 時間限制:3000 ms  |  記憶體限制:65535 KB 難度:3 描述 現在,有一行括號序列,請你檢查這行括號是否配對。 輸入 第一行輸入一個數N(0<N<=100),表示有N組測試資料。後面的N行輸入多組輸入資料,每

括號配對問題2

main 輸入一個數 函數 字符 stdio.h stdlib.h return 長度 括號配對 #include<stdio.h> #include<string.h> #include<stdlib.h> // 寫一個判斷的括號是否匹

括號配對問題1

turn ces ID typedef lse tac pre types amp #include<stdio.h> #include<stdlib.h> #define Stack_size 10000 typedef struct

括號配對問題

wid -- highlight width image 結果 line ext 圖片 原題鏈接:http://acm.nyist.edu.cn/JudgeOnline/problem.php?pid=2 括號配對問題 時間限制:3000 ms | 內存限制:6553

1346: 括號配對

1346: 括號配對 時間限制: 1 Sec  記憶體限制: 256 MB 題目描述 給出一串長度為n的括號序列(只包含小括號),計算出最少的交換(兩兩交換)次數,使整個括號序列匹配。 我們認為一個括號匹配,即對任意一個')',在其左側都有一個'(

NYOJ 括號配對問題

時間限制:3000 ms  |  記憶體限制:65535 KB 難度:3 輸入 第一行輸入一個數N(0<N<=100),表示有N組測試資料。後面的N行輸入多組輸入資料,每組輸入資料都是一個字串S(S的長度小於10000,且S不是空串),測試資料組數少於5組

NYOJ 2題------括號配對問題

括號配對問題 時間限制:3000 ms  |  記憶體限制:65535 KB 難度:3 描述 現在,有一行括號序列,請你檢查這行括號是否配對。 輸入 第一行輸入一個數N(0<N<=100),表示有N組測試資料。後面的N行

nyoj2 括號配對問題

描述: 現在,有一行括號序列,請你檢查這行括號是否配對。 輸入: 第一行輸入一個數N(0<N<=100),表示有N組測試資料。後面的N行輸入多組輸入資料 每組輸入資料都是一個字串S(S的長度小於10000,且S不是空串), 測試資料組數少於5組。資料保證S中只含有"[", “]”

程式設計練習題:括號配對問題(Java)

問題描述:問題描述 : 輸入一個字串 裡面只含有 [ , ] , ( , ) 四種括號 ; 現要求判斷這個字串 是否滿足括號匹配 如 ([])() 是匹配的 ([)]是不匹配的

NYOJ-2-括號配對問題 棧

現在,有一行括號序列,請你檢查這行括號是否配對。  輸入  第一行輸入一個數N(0<N<=100),表示有N組測試資料。後面的N行輸入多組輸入資料,每組輸入資料都是一個字串S(S的長度小於10000,且S不是空串),測試資料組數少於5組。資料保證S中只含有”[“,”]

phpMyAdmin 的低階程式碼錯誤:括號配對

錯誤提示: Warning in ./libraries/sql.lib.php#601 count(): Parameter must be an array or an object that im

字串中括號配對檢查(java實現)

題目描述 對於一行程式碼(字串),裡面可能出現大括號“{}”、中括號“[]”和小括號“()”,請程式設計判斷改行程式碼的括號巢狀是否正確。“()”,“({})”,“printf(‘Hello Netease’)”等都是括號使用的正確方法,“(}”,”print(Hello

括號配對問題(C)

描述 現在,有一行括號序列,請你檢查這行括號是否配對。 輸入 第一行輸入一個數N(0<N<=100),表示有N組測試資料。後面的N行輸入多組輸入資料,每組輸入資料都是一個字串S(S的長度小於

ACM線上評測系統 各大高校的ACM線上測評系統

點選開啟連結 山東理工大學http://acm.sdut.edu.cn/ 南陽理工學院http://acm.nyist.net/JudgeOnline/ 浙江大學http://acm.zju.edu.cn  北京大學http://acm.pku.edu.cn/JudgeOn

第二道題:括號配對問題

這道題著實費了我不少時間(90分鐘==。),問題的關鍵是怎麼全面判斷括號是否配對,我原來的思路是比較各個括號的個數,毫無疑問,這會漏掉許多情況,比如 ] [ 、[ ( ] )…然後我就打算直接比較字串,由兩邊到中間,一 一比較,但這仍然會漏掉一些情況,比如 ([

括號配對(用棧實現)

#include<iostream> #include<cstdio> #include<stack> using namespace std; int main() { char ch; stack<char>mysta

[NYOJ] 02括號配對問題(c語言鏈棧實現)

括號配對問題 時間限制:3000 ms  |  記憶體限制:65535 KB 難度:3 描述現在,有一行括號序列,請你檢查這行括號是否配對。 輸入第一行輸入一個數N(0<N&