-5
我想生成一個隨機的線性/數學方程。 我有兩個輸入,最終結果和操作符的數量。例如:如何生成一個隨機的線性方程
result = 84
noOfOperators = 3
所以我期望方程爲15 + (20 * 4) - 11 = 84
。
我想生成一個隨機的線性/數學方程。 我有兩個輸入,最終結果和操作符的數量。例如:如何生成一個隨機的線性方程
result = 84
noOfOperators = 3
所以我期望方程爲15 + (20 * 4) - 11 = 84
。
甚至不知道這是否是一個等式,因爲沒有未知:-)
無論哪種方式,有很多的變化。我想到的一種算法是這樣的:
還是需要在合適的條件下決定停止。編輯:你的'運營商的數量'可以提供,不要指望「沒有操作」,你會沒事的
這會給你一個表達結果樹,也可以堅持整數領域(這是你通常想要什麼,如果這對像創建小學數學題)
測試代碼如下:
#include <iostream>
#include <stdlib.h>
#include <stack>
#include <time.h>
using namespace std;
#define MAX_RAN 100
char OpDisplay(int i)
{
switch(i)
{
case 0: return '+';
case 1: return '-';
case 2: return '*';
case 3: return '/';
default: break;
}
return '+';
}
double CalOp(double a, double b, int Op)
{
switch(Op)
{
case 0: return (a+b);
case 1: return (a-b);
case 2: return (a*b);
case 3: return (a/b);
}
return 0;
}
int main(int argc, char* argv[])
{
srand((unsigned)time(NULL));
int result;
int numOp = 1;
cout<<"Enter the Result:";
cin>>result;
cout<<"Enter the number of operators:";
cin>>numOp;
double* pData = new double[numOp+1];
int* pOp = new int[numOp];
for(int i = 0; i < numOp; i++)
{
//Generate Num
pData[i] = rand()% MAX_RAN;
//Generate Op
pOp[i] = rand()%4;
}
pData[numOp] = rand()% MAX_RAN;
stack<double> sD;
stack<int> sOp;
sD.push(pData[0]);
//caluculate * and/first
for(int i = 0; i < numOp; i++)
{
if(pOp[i]>1) // * or/
{
double re = sD.top();
re = CalOp(re, pData[i+1],pOp[i]);
sD.pop();
sD.push(re);
}
else
{
sOp.push(pOp[i]);
sD.push(pData[i+1]);
}
}
stack<double> sD_R;
stack<int> sOp_R;
//reverse the stack
while(!sD.empty())
{
sD_R.push(sD.top());
sD.pop();
}
while(!sOp.empty())
{
sOp_R.push(sOp.top());
sOp.pop();
}
//calculate + and -
double answer = sD_R.top();
sD_R.pop();
while(!sOp_R.empty())
{
answer = CalOp(answer, sD_R.top(), sOp_R.top());
sD_R.pop();
sOp_R.pop();
}
//resign the data according to the answer and the result we entered before.
for(int i = 0; i < numOp; i++)
{
cout<<"("<<pData[i]<<")"<<OpDisplay(pOp[i]);
}
cout<<"("<<pData[numOp]<<")"<<" = "<<answer<<endl;
pData[0] = pData[0]*result/answer;
for(int i = 1; i < numOp+1; i++)
{
if(3 != pOp[i-1] && 2 != pOp[i-1])
{
pData[i] = pData[i]*result/answer;
}
}
for(int i = 0; i < numOp; i++)
{
cout<<"("<<pData[i]<<")"<<OpDisplay(pOp[i]);
}
cout<<"("<<pData[numOp]<<")"<<" = "<<result<<endl;
delete[] pData;
delete[] pOp;
}
如有特殊原因既'C++'和'動作,3'標記您的問題嗎?你沒有提到任何特定於這些語言的東西。 – jweyrich 2012-07-22 08:05:53
'0 *(任意複雜的表達式)+ nOfOperators的結果> 1. nOfOperstors = 1時的'0+結果'。 – juanchopanza 2012-07-22 08:09:41
您有最終結果嗎?什麼最終結果? – Mikhail 2012-07-22 08:16:44