#include <time.h> #include <stdlib.h>
#include <stdio.h>
char GetOperByP(double p)
{
char ch = '/';
if(p>=0 && p<0.2)
{
ch = '+';
}
else if(p>=0.2 && p<0.4)
{
ch = '-';
}
else if(p>=0.4 && p<0.6)
{
ch = '*';
}
return ch;
}
bool RandomCreate(char exp[], const int nLen, const int l, const int r)
{
if(l>=nLen || r>=nLen || l<0 || r<0 || (r-l)%2 != 0)
{
return false;
}
if(l==r)
{
exp[l] = '0' + (rand()%10);
return true;
}
double p = rand()/32768.0;
if(p>0.8) //生成括号
{
exp[l]='(';
exp[r]=')';
return RandomCreate(exp, nLen, l+1, r-1);
}
else //生成运算符号
{
//根据p的取值范围,选择对应的字符chr;
char chr = GetOperByP(p);
//在[L+1,R-1]范围内生成一个随机数t,注意必须满足t-L为奇数;
int t = l+1 + (rand() % (r-l-1));
if((t-l)%2 == 0)
{
if(t+1<r)
{
++ t;
}
else if(t-1>l)
{
-- t;
}
else
{
return false;
}
}
exp[t]=chr;
return RandomCreate(exp, nLen, l, t-1) && RandomCreate(exp, nLen, t+1, r);
}
return false;
}
int main()
{
const int N = 101;
char a[N+1] = {0};
srand(time(NULL));
int need = 7;
if(RandomCreate(a, need, 0, need-1))
{
printf("%s/n",a);
}
return 0;
}