10个操作数的随机四则运算

这道题目要插入括号,所以比上次稍微难点,但是用dfs插入括号,分成三段,然后针对每一段具体操作,还是分分钟搞定,废话不多说,具体看代码的注释吧。

运行效果:

 1 #include<iostream>
 2 #include<cstdlib>
 3 #include<set>
 4 #include<ctime>
 5 #include<string.h>
 6 using namespace std;
 7 #define random(x) (rand()%x)
 8 int a[100];
 9 char s[4]={'+','-','*','/'};
10 char sym[100];
11 char brackets[100];
12 void dfs(int s,int e){//使用dfs递归添加括号 
13     if(!random(4)) return;//四分之一的概率,不进行任何操作 
14     if(e-s<=1) return;//只有一个元素或没有元素,不进行任何操作 
15     int s1=random(e-s-1)+s;//随机生成插入括号的位置 
16     int e1=random(e-s1)+s1;
17     if(s1<s||e1>e||s1>=e1)return;
18     brackets[s1]='(';brackets[e1]=')';
19     dfs(s,s1-1);//插入括号的左边几个元素 
20     dfs(e1+1,e);//括号之间的几个元素 
21     dfs(s1+1,e1-1);//括号右边的几个元素 
22 }
23 int main(){
24     srand(time(NULL)); 
25     int T=30,n;
26     set<int> mySet; 
27     while(T--){
28         n=random(18)+2;
29         memset(brackets,'.',sizeof(brackets));
30         for(int i=1;i<=n;i++){
31             a[i] = random(999)+1;
32             if(mySet.count(a[i])) a[i] = random(999)+1;//使用标准库set来避免重复 
33             mySet.insert(a[i]);
34             sym[i]=s[random(4)];
35         }
36         dfs(1,n);
37         if(brackets[1]=='(')cout<<'(';
38         cout<<a[1];
39         for(int i=2;i<=n;i++){
40             cout<<sym[i];
41             if(brackets[i]=='(')cout<<'(';
42             cout<<a[i];
43             if(brackets[i]==')')cout<<')';
44         }
45         cout<<endl;
46     }
47     return 0;
48 }

转载于:https://www.cnblogs.com/yifan2016/p/5261593.html

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值