隨機生成乙個數字,代表著生成表示式中運算元的個數。
迴圈生成乙個數字,將其輸出,然後等概率生成『+』『-』『*』『/』中的乙個跟在該數字後面,輸出。
以一定概率生成左括號,若生成了左括號則輸出,並進行計數標誌當前共有多少個未完成匹配的左括號。
若當前有未完成匹配的左括號,則在生成乙個數字後,生成乙個操作符前,以一定的概率生成右括號。
在生成完畢後,生成最後乙個數並將為匹配的左括號予以匹配。
根據上述思路,其**實現如下:
1 #include 23#define maxl 8
4#define maxn 10056
using
namespace
std;
78 typedef long
long
ll;9
10 ofstream fout("
equation.txt");
11char op = ;
1213
void
create()
14while(length < 2
);20
bool div = false; //
用來防止出現除0錯誤
21int brack_cnt = 0; //
記錄未匹配的左括號個數
22ll num, op;
2324
for (int i = 1; i < length; i++) //
迴圈生成算式
25while(num == 0
);32 fout <34else
35 fout << rand()%maxn; //
否則直接生成數字輸出
36int tmpcnt =brack_cnt;
37for (int j = 0; j < tmpcnt; j++) //
若當前有未匹配的左括號,則對每乙個未匹配的左括號,都有一定概率生成相應右括號。
3844}45
46 op = rand()%4; //
生成運算子
47 fout <48if (op == 3) //
若生成了除號,則需要置相應標誌位
49 div = true;50
51if (!(rand()%3)) //
以一定概率生成左括號,概率為1/3
5261}62
if (div) //
生成最後乙個數字,該數字後不需要跟運算子
63while(num == 0
);68 fout <70else
71 fout << rand()%maxn;
72while(brack_cnt--) //
補全右括號
73 fout << ")"
;74 fout <7677
intmain()
78
這個程式在一定程度上實現了我們所需要的功能,但是仍有一定的不足,最重要的乙個問題就是會生成一些無用的括號,比如(2*3)*4等。所以整個程式還是有改進的餘地的,在日後可以對其進行優化,使其能夠完美的實現需求的功能。
四則運算表示式求值
03 四則運算表示式求值 輸入輸入為四則運算表示式,僅由陣列 四則運算符 左右括號組成,不含空格。假設運算子結果都是整數。輸出輸出這個表示式的值 分析首先我們要搞清楚表示式的定義是什麼 表示式 由乙個或者多個項組成,多個項的表示式由 連線 項 由乙個或者多個因子組成,多個因子由 連線 因子 由 表示...
四則運算表示式求值
表示式求值是關於棧的應用,涉及到中綴與字尾式的轉換,本文關於10以內不帶括號的四則運算。9 3 4 x 3 24 1 x 9 5 9 9 5 x 9 4 6 2 x 3 1 42 思路 遇到數字直接入數字棧。遇到運算子,第乙個運算子直接入符號棧,後面的需要與符號棧棧頂元素比較優先順序。若當前優先順序...
四則運算表示式總結
這兩周完成了第乙個個人專案 四則運算表示式。在整個開發的過程中我有一些收穫也發現了自身的一些問題。下面就分條簡述一下。1 實現隨機生成任意長度的四則表示式 括號 2 實現四則表示式的計算 包括分數 3 實現接收使用者對某四則運算表示式計算的結果並判斷正確性。4 實現結合1 2 3功能的mfc應用程式...