随机

#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;
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值