알고리즘 훈련 불필요 한 괄호 삭제

5428 단어 알고리즘C 언어
문제 설명 은 키보드 에서 괄호 가 함 유 된 네 가지 연산 식 을 입력 하 십시오. 포함 할 수 있 는 여분의 괄호 를 제거 해 야 합 니 다. 결 과 는 원 표현 식 에서 변수 와 연산 자의 상대 적 인 위치 가 변 하지 않 고 원 표현 식 과 등가 가 되 어야 합 니 다. 간소화 하지 마 십시오.또한 '+' - '양음 호 로 사용 되 는 경 우 는 고려 하지 않 습 니 다. 즉, 입력 식 에 (+ a) 또는 (- a) 상황 이 나타 나 지 않 습 니 다.형식 표현 식 문자열 을 입력 하 십시오. 길 이 는 255 를 초과 하지 않 고 빈 칸 문 자 를 포함 하지 않 습 니 다.표현 식 의 모든 변 수 는 하나의 소문 자 영문 자모 이 고 연산 자 는 플러스 + 마이너스 - 곱 하기 * 나 누 기 / 등 연산 기호 만 있 습 니 다.출력 형식 에서 불필요 한 괄호 를 제거 한 표현 식 샘플 입력 샘플 1: a + (b + c) - d 샘플 2: a + b / (c + d) 샘플 3: (a * b) + c / d 샘플 4: (a + b) * f) - (i / j)
샘플 출력
샘플 1: a + b + c - d 샘플 2: a + b / (c + d) 샘플 3: a * b + c / d 샘플 4: (a + b) * f - i / j
#include <stdio.h>

int hasExcess(char s[], int leftBracket, int rightBracket)
{
    int i, leftAcount;

    //  "-(a+b)"   
    if(s[leftBracket-1] == '-'){    

        i = leftBracket;
        leftAcount = 1;
        while(++i < rightBracket){
            if(s[i] == '(') leftAcount ++;
            if(s[i] == '+' && leftAcount == 1)  return 0;
        }
    }
    if(s[leftBracket-1] == '/') return 0;    
    //  "   (a    b)   "   
    if(s[leftBracket-1] != '*' && s[leftBracket-1] != '/' 
        && s[rightBracket+1] != '*' && s[rightBracket+1] != '/') 
        return 1;

    //  "*(a*b)    "   
    i = leftBracket;
    leftAcount = 1;
    while(++i < rightBracket){
        if(s[i] == '(') leftAcount ++;
        if(s[i] == '*' && leftAcount == 1)  return 1;
    }


    return 0;
}

int delExcessBracket(char s[], int index)
{
    int leftBracket, rightBracket;

    while(s[index] != '\0'){

        if(s[index] == ')') return index;
        if(s[index] == '('){

            leftBracket = index;
            index = rightBracket = delExcessBracket(s, index+1);

            if(hasExcess(s, leftBracket, rightBracket))
                s[leftBracket] = s[rightBracket] = ' ';

        }
        index ++;
    }


}

int main()
{
    char str[100];
    int i;

    scanf("%s", str);

    delExcessBracket(str, 0);

    i = -1;
    while(str[++i] != '\0'){

        if(str[i] != ' '){
            printf("%c", str[i]);
        }
    }

    return 0;
}

좋은 웹페이지 즐겨찾기