vijos 1003等價表示式

2021-06-28 13:41:02 字數 2120 閱讀 2939

明明進了中學之後,學到了代數表示式。有一天,他碰到乙個很麻煩的選擇題。這個題目的題幹中首先給出了乙個代數表示式,然後列出了若干選項,每個選項也是乙個代數表示式,題目的要求是判斷選項中哪些代數表示式是和題幹中的表示式等價的。這個題目手算很麻煩,因為明明對計算機程式設計很感興趣,所以他想是不是可以用計算機來解決這個問題。假設你是明明,能完成這個任務嗎?這個選擇題中的每個表示式都滿足下面的性質:1. 表示式只可能包含乙個變數『a』。2. 表示式中出現的數都是正整數,而且都小於10000。3. 表示式中可以包括四種運算『+』(加),『-』(減),『*』(乘),『^』(乘冪),以及小括號『(』,『)』。小括號的優先順序最高,其次是『^』,然後是『*』,最後是『+』和『-』。『+』和『-』的優先順序是相同的。相同優先順序的運算從左到右進行。(注意:運算子『+』,『-』,『*』,『^』以及小括號『(』,『)』都是英文本元)4. 冪指數只可能是1到10之間的正整數(包括1和10)。5. 表示式內部,頭部或者尾部都可能有一些多餘的空格。下面是一些合理的表示式的例子:((a^1) ^ 2)^3,a*a+a-a,((a+a)),9999+(a-a)*a,1 + (a -1)^3,1^10^9……對於30%的資料,表示式中只可能出現兩種運算子『+』和『-』;對於其它的資料,四種運算子『+』,『-』,『*』,『^』在表示式中都可能出現。對於全部的資料,表示式中都可能出現小括號『(』和『)』。分析:

1.不需要考慮括號不匹配問題,輸入絕對合法。
2.不需要考慮形如

(-3+a^7)*2

這樣的情況。

3.另一方面,我認為只有試夠11個數才能充分說明正確性:因為

a^10+k9a^9+k8a^8+.......=(a+3)^10+......

這是乙個一元十次方程,它需要11個點來確定一條十次曲線。所以要將0-10都代入才能說明問題。

當然,如果這是一條6次曲線,7個點就夠,可是誰有想寫乙個判斷次數的函式呢?

4.因為取餘運算,導致運算順序不同,結果就不同。這是乙個神坑。所以試的點少一點,取餘數大一點就容易過。
#includeusing namespace std;

#define big 10007

#define test 8

char ti[51];//題幹

int size;//選項個數

int result[test];//準備試的數

bool prior(char a, char b)

int power(int a, int b)

return ans;

}int op(int a, int b, char o)

}//x表示數字,o表示符號

int calculate(int x, int xsize, char o, int osize)

return xstack[0];

}int go(char ex, int a)

i++; j++;

}} else if (ex[i] == 'a')

else

x[xi++] = n;

} while (ex[i] == ' ')i++;

if (ex[i] == 0)break;

if (ex[i] == '+' || ex[i] == '-' || ex[i] == '*' || ex[i] == '^')

i++;

} return calculate(x, xi, o, oi);

}int main()

char choose[51];

cin.getline(choose, 55);

for (i = 0; i < size; i++)

if (j == test)

} return 0;

}

NOIP2005 等價表示式

等價表示式 equal.pas c cpp 問題描述 明明進了中學之後,學到了代數表示式。有一天,他碰到乙個很麻煩的選擇題。這個題目的題幹中首先給出了乙個代數表示式,然後列出了若干選項,每個選項也是乙個代數表示式,題目的要求是判斷選項中哪些代數表示式是和題幹中的表示式等價的。這個題目手算很麻煩,因為...

NOIP 2005 等價表示式

題目描述 明明進了中學之後,學到了代數表示式。有一天,他碰到乙個很麻煩的選擇題。這個題目的題幹中首先給出了乙個代數表示式,然後列出了若干選項,每個選項也是乙個代數表示式,題目的要求是判斷選項中哪些代數表示式是和題幹中的表示式等價的。這個題目手算很麻煩,因為明明對計算機程式設計很感興趣,所以他想是不是...

P1054 等價表示式

目錄 實現 等價表示式 給出乙個表示式,求之後給出的與之等價的表示式。保證每個表示式最多只有乙個變數 a 可能有 運算。由於只有乙個變數,我們可以將 a 特殊值化,如果最終結果相同那麼判定兩式等價。為了減小誤差,我們可以多取幾個值,但是由於有乘方操作所以最好不要太大。之後就是中綴表示式的計算,我採用...