Ах, да, Akeem, действительно, возможно это имелось в виду. Но в любом случае katz'у следовало более подробно обрисовать ситуацию.
Вот, как раз, решил в прошедшем семестре эту задачку. brackets.c:
| Код | /* brackets Copyright (C) 2006 Vadim A. Kazantsev aka V.A.KeRneL. */
#include <stdio.h> /*#include <stdio_ext.h>*/ //#include <stdlib.h> //#include <malloc.h> //#include <string.h>
/* ************************************************************************ */
#if defined( VERBOSE ) # define Vprintf( args ) printf args # define Vputchar( args ) putchar args #else # define Vprintf( args ) /* empty */ # define Vputchar( args ) /* empty */ #endif
/* ************************************************************************ */
/**/ #define TRUE 1 #define FALSE 0 typedef int bool; /**/
/* enum _bool { FALSE = 0; #define FALSE FALSE TRUE = 1; #define TRUE TRUE };
typedef struct _bool bool; #define bool bool */
/* ************************************************************************ */
#define STACK_SIZE 1000 /* (may be changed) */
typedef struct { int s[ STACK_SIZE + 1 ]; /* body of stack */ //int t[ STACK_SIZE + 1 ]; /* type of element */ int top; /* position of higher element */ int count; /* number of stack element */ } stack;
stack ss;
int last_elem; //int last_type;
void init_stack( stack * s ); void push( stack * s, int x /*, int type*/ ); int pop( stack * s ); bool /*int*/ is_empty( stack * s );
void init_stack( stack * s ) { s->top = 0; s->count = 0; }
void push( stack * s, int x /*, int type*/ ) { if ( s->count >= STACK_SIZE ) { printf( "Warning: stack overflow push x = %d\n", x ); } else { s->top = ( s->top + 1 ) % STACK_SIZE; s->s[ s->top ] = x; //s->t[ s->top ] = type; s->count = s->count + 1; } }
int pop( stack * s ) { int x; if ( is_empty( s ) ) { printf( "Warning: empty stack pop\n" ); } else { x = s->s[ s->top ]; last_elem = x; //last_type = s->t[ s->top ]; s->top = ( s->top - 1 ) % STACK_SIZE; s->count = s->count - 1; } return ( x ); }
bool /*int*/ is_empty( stack * s ) { if ( s->count <= 0 ) { return ( TRUE ); } else { return ( FALSE ); } }
/* ************************************************************************ */ /* ******************************* Main ******************************* */ /* ************************************************************************ */
#define MAX_LEN ( STACK_SIZE - 1 )
char brackets[ MAX_LEN + 1 ];
/* Main. */ int main( void ) { int t; /* number of test cases */ //int i, j; /* counters */ char * b_ptr; /* pointer for `brackets' string */ char _top; scanf( "%d", &t ); //printf( "%d\n", t ); loop: while ( t-- ) { scanf( "%s", brackets ); //printf( "%s\n", brackets ); b_ptr = ( char * ) brackets; while ( *b_ptr ) { //printf( "%c", *b_ptr ); //push( &ss, ( int ) *b_ptr ); //printf( "%c", ( char ) pop( &ss ) ); switch ( *b_ptr ) { case '(': case '[': case '{': case '<': push( &ss, ( int ) *b_ptr ); break; case ')': case ']': case '}': case '>': if ( is_empty( &ss ) ) { Vprintf(( "%c", *b_ptr )); Vputchar(( '\n' )); puts( "NO" ); Vputchar(( '\n' )); goto loop; } _top = ( char ) pop( &ss ); //printf( " _top = %c\n", _top ); //printf( "*b_ptr = %c\n", *b_ptr ); if ( !( _top == '(' && *b_ptr == ')' ) && !( _top == '[' && *b_ptr == ']' ) && !( _top == '{' && *b_ptr == '}' ) && !( _top == '<' && *b_ptr == '>' ) ) { Vprintf(( "%c", _top )); Vprintf(( "%c", *b_ptr )); Vputchar(( '\n' )); puts( "NO" ); Vputchar(( '\n' )); goto loop; } Vprintf(( "%c", _top )); Vprintf(( "%c", *b_ptr )); break; default: ; } ++b_ptr; } Vputchar(( '\n' )); puts( is_empty( &ss ) ? "YES" : "NO" ); Vputchar(( '\n' )); } return ( 0 ); } /* main() */
/* brackets.c ends here. */
|
Example
input1.txt:
| Код | 8 () (()) ()() )()( ({[<>]}) ()({[<>]})() ([({})<>({})])() (({)(}))
|
output1.txt:
| Код | YES YES YES NO YES YES YES NO
|
Компиляция:
| Код | gcc brackets.c -o brackets && chmod -x brackets
|
Запуск:
| Код | ./brackets < input1.txt
|
========================================================================================== P.S. Всегда следуйте правилам форма! В частности: Если вопрос решён, то воспользуйтесь ссылкой "Пометить как решённый", которая находится под кнопками создания темы или флажком при ответе  ==========================================================================================
|