程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> C++ >> C++入門知識 >> UVA 10700-Camel trading(棧求表達式的最大最小值)

UVA 10700-Camel trading(棧求表達式的最大最小值)

編輯:C++入門知識

UVA 10700-Camel trading(棧求表達式的最大最小值)


Camel trading

Time Limit: 1 second

Background

Aroud 800 A.D., El Mamum, Calif of Baghdad was presented the formula 1+2*3*4+5, which had its origin in the financial accounts of a camel transaction. The formula lacked parenthesis and was ambiguous. So, he decided to ask savants to provide him with a method to find which interpretation is the most advantageous for him, depending on whether is is buying or selling the camels.

The Problem

You are commissioned by El Mamum to write a program that determines the maximum and minimum possible interpretation of a parenthesis-less expression.

Input

The input consists of an integer N, followed by N lines, each containing an expression. Each expression is composed of at most 12numbers, each ranging between 1 and 20, and separated by the sum and product operators + and *.

Output

For each given expression, the output will echo a line with the corresponding maximal and minimal interpretations, following the format given in the sample output.

Sample input

3
1+2*3*4+5
4*18+14+7*10
3+11+4*1*13*12*8+3*3+8

Sample output

The maximum and minimum are 81 and 30.
The maximum and minimum are 1560 and 156.
The maximum and minimum are 339768 and 5023.

題意:加括號求表達式的最大值和最小值、

思路:一開始看毫無頭緒,但是你仔細算,表達式按照優先級順序來算,所得的結果正好是最小值,如果按照先算加法後算乘法來算,正好是最大值,所以剩下的就用棧來模擬完就行了。

#include 
#include 
#include 
#include 
#include 
#include 
#include 
#include 
#include 
#include 
using namespace std;
int main()
{
    int T;
    char ch;
    long long a,t;
    long long min,max;
    scanf("%d",&T);
    while(T--) {
        stackminn;
        stackmaxx;
        scanf("%lld",&a);
        minn.push(a);
        maxx.push(a);
        while((ch=getchar())!='\n') {
            scanf("%lld",&a);
            if(ch=='+') {
                minn.push(a);
                t=maxx.top();
                maxx.pop();
                t+=a;
                maxx.push(t);
            } else if(ch=='*') {
                maxx.push(a);
                t=minn.top();
                minn.pop();
                t*=a;
                minn.push(t);
            }
        }
        min=0;
        max=1;
        while(!minn.empty()) {
            min+=minn.top();
            minn.pop();
        }
        while(!maxx.empty()) {
            max*=maxx.top();
            maxx.pop();
        }
        printf("The maximum and minimum are %lld and %lld.\n",max,min);
    }
    return 0;
}


  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved