上一个版本有一点小问题,插括号时考虑的太少了,丢掉了几种情况,所以导致括号的数量稀少,所以我稍微改进了一下,还有,我按照老师的标准把格式也稍微改了一下

下面是我改进后的代码

#include<iostream>
#include<cstdlib>
#include<set>
#include<ctime>
#include<string.h>
#include<string>
#include<sstream>
using namespace std;
#define random(x) (rand()%x)
int a[100];
char s[4]={'+','-','*','/'};
char sym[100];
char brackets[100];
int num[100];
string numToString(int num)
{stringstream ss;string as="";ss<<num;ss>>as;return as;
}
void dfs(int s,int e)//使用dfs递归添加括号
{if(!random(4)) //四分之一的概率,不进行任何操作
    {return;}if(e-s<=1)//只有一个元素或没有元素,不进行任何操作
    {return;} int s1=random(e-s-1)+s;//随机生成插入括号的位置 int e1=random(e-s1)+s1;while(s1<s||e1>e||s1>=e1||(s1==s&&e1==e))//避免无用括号
    { s1=random(e-s-1)+s;e1=random(e-s1)+s1;}if(brackets[s1]==')'||brackets[e1]=='(') {return;} brackets[s1]='(';brackets[e1]=')';num[s1]++;num[e1]++; dfs(s,s1-1);//插入括号的左边几个元素 dfs(e1+1,e);//括号之间的几个元素 dfs(s1,e1);//括号右边的几个元素
}
int main()
{srand(time(NULL)); int T=30,n;set<string> mySet;string ans;while(T--){ans="";n=random(8)+2;memset(brackets,'.',sizeof(brackets));memset(num,0,sizeof(num));for(int i=1;i<=n;i++){a[i] = random(999)+1;sym[i]=s[random(4)];}dfs(1,n);while(brackets[1]=='('&&num[1]--){ans+='(';}ans+=numToString(a[1]);for(int i=2;i<=n;i++){ans+=sym[i];while(brackets[i]=='('&&num[i]--){ans+='(';} ans+=numToString(a[i]);while(brackets[i]==')'&&num[i]--){ans+=')'; } }if(!mySet.count(ans)){cout<<ans<<endl;mySet.insert(ans);}else{T++;}}return 0;
}

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

10个操作数的随机四则运算(二)相关推荐

  1. python随机生成二维列表_对python产生随机的二维数组实例详解

    对python产生随机的二维数组实例详解 最近找遍了python的各个函数发现无法直接生成随机的二维数组,其中包括random()相关的各种方法,都没有得到想要的结果.最后在一篇博客中受到启发,通过列 ...

  2. 第2章【思考与练习1】一维数组访问,在subjects数组中选择并显示序号1、2、4门课的名称。二维数组访问,选择并显示scores数组的1、4行。生成由整数10~19组成的2×5的二维数组

    P25思考与练习1 1.一维数组访问. 1)在subjects数组中选择并显示序号1.2.4门课的名称,使用倒序索引选择并显示names数组中"方绮雯". 2)选择并显示names ...

  3. 机器学习系列(10)_决策树与随机森林回归

    注:本篇文章接上一篇文章>>机器学习系列(9)_决策树详解01 文章目录 一.决策树优缺点 二.泰坦尼克号幸存者案例 三.随机森林介绍 1.随机森林的分类 2.重要参数 [1]n_esti ...

  4. UA MATH567 高维统计II 随机向量10 Grothendieck不等式的证明 版本二:kernel trick

    UA MATH567 高维统计II 随机向量10 Grothendieck不等式的证明 版本二:kernel trick 在介绍亚高斯随机向量的更多应用之前,我们先简单介绍一下核方法(kernel t ...

  5. python循环10次_开发一个循环 5 次计算的小游戏, 设置随机种子为10,每次随机产生两个 1~10的数字以及随机选择...

    开发一个循环 5 次计算的小游戏, 设置随机种子为10,每次随机产生两个 1~10的数字以及随机选择 "+.-.*"运算符,构成一个表达式, 让用户计算式子结果并输入结果,如果计算 ...

  6. 定义一个类:实现功能可以返回随机的10个数字,随机的10个字母, 随机的10个字母和数字的组合;字母和数字的范围可以指定,类似(1~100)(A~z)...

    #习题2:定义一个类:实现功能可以返回随机的10个数字,随机的10个字母, #随机的10个字母和数字的组合:字母和数字的范围可以指定class RandomString():#随机数选择的范围作为参数 ...

  7. 计算机网络之数据链路层:10、CSMA协议-随机访问介质访问控制

    数据链路层:10.CSMA协议-随机访问介质访问控制 思维导图: 载波监听多路访问协议(CSMA): 1-坚持CSMA: 非坚持CSMA: p-坚持CSMA: 三种CSMA对比: 思维导图: 载波监听 ...

  8. 前端页面中根据链接随机生成二维码

    前端页面中根据链接随机生成二维码 1.需要安装qrcodejs2 npm install qrcodejs2 -save 2.在所需要的页面中引入 import QRCode from 'qrcode ...

  9. Android Q 10.1 KeyMaster源码分析(二) - 各家方案的实现

    写在之前 这两篇文章是我2021年3月初看KeyMaster的笔记,本来打算等分析完KeyMaster和KeyStore以后再一起做成一系列贴出来,后来KeyStore的分析中断了,这一系列的文章就变 ...

最新文章

  1. Apache Commons Fileupload 漏洞,可恶意操作文件
  2. 50代码HTML5 Canvas 3D 编辑器优雅搞定
  3. POJ 3041 Asteroids 二分图匹配
  4. apmserv mysql密码_apmserv中修改mysql的root与phpmyadmin密码方法介绍_PHP教程
  5. windows10系统下vue开发环境搭建
  6. 记录一下学习EFCore中的基础知识
  7. 我们不应该歧视任何的编程语言,因为他们都是萌娘
  8. 基于MIMO的无线携能通信系统优化问题的基础知识和研究方向
  9. 使用XMind编写测试用例
  10. 家庭用计算机是一体好还是,国产家用电脑一体机,性能够用就好!!!
  11. 老钓友分享蚯蚓钓鲤鱼配方
  12. QT5实现串口收发数据(上位机与下位机通信)
  13. WPS如何快速统计姓名个数
  14. document.documentElement对象
  15. 基于python的简单名片系统
  16. package-info类
  17. 体会一下hop-by-hop逐跳头中的路由器告警选项(Router Alert Option)的玩法
  18. 【技术干货】PCB焊盘设计之问题详解
  19. 【Android】Android界面设计
  20. ubuntu16.04安装及使用VLC

热门文章

  1. Why to do,What to do,Where to do 与 Lambda表达式!
  2. [转载]全金属外壳——坦克遥控高射机枪
  3. 网页截图工具CutyCapt
  4. SQL盲注工具BBQSQL
  5. excel字段自动java类,Java 接口自动化系列--工具类之Excel测试数据解析封装
  6. c语言结构体共用体枚举实例程序,10-C语言结构体-共用体-枚举
  7. aforge videoresolution获取的相机像素不全_新手做视觉系统,如何选择合适的相机?...
  8. 长得类似铁甲小宝的机器人_铁甲小宝:小时候只顾看机器人忽略重点,长大后再看:是我太天真...
  9. oracle rac vip什么用,oracle 10g,11g RAC中vip作用
  10. java 项目保存日志到本地_Springboot项目使用Slf4j将日志保存到本地目录