10个操作数的随机四则运算
2016-03-10 13:37
387 查看
这道题目要插入括号,所以比上次稍微难点,但是用dfs插入括号,分成三段,然后针对每一段具体操作,还是分分钟搞定,废话不多说,具体看代码的注释吧。
运行效果:
运行效果:
#include<iostream> #include<cstdlib> #include<set> #include<ctime> #include<string.h> using namespace std; #define random(x) (rand()%x) int a[100]; char s[4]={'+','-','*','/'}; char sym[100]; char brackets[100]; 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; if(s1<s||e1>e||s1>=e1)return; brackets[s1]='(';brackets[e1]=')'; dfs(s,s1-1);//插入括号的左边几个元素 dfs(e1+1,e);//括号之间的几个元素 dfs(s1+1,e1-1);//括号右边的几个元素 } int main(){ srand(time(NULL)); int T=30,n; set<int> mySet; while(T--){ n=random(18)+2; memset(brackets,'.',sizeof(brackets)); for(int i=1;i<=n;i++){ a[i] = random(999)+1; if(mySet.count(a[i])) a[i] = random(999)+1;//使用标准库set来避免重复 mySet.insert(a[i]); sym[i]=s[random(4)]; } dfs(1,n); if(brackets[1]=='(')cout<<'('; cout<<a[1]; for(int i=2;i<=n;i++){ cout<<sym[i]; if(brackets[i]=='(')cout<<'('; cout<<a[i]; if(brackets[i]==')')cout<<')'; } cout<<endl; } return 0; }
相关文章推荐
- Exception in thread java.lang.IllegalThreadStateException
- PL/SQL Developer使用技巧、快捷键
- Problem F: 结构体--学生信息排序
- POJ1511
- 被遗忘的C结构体打包技术
- Ext3.2 继承
- hdu-5584 LCM Walk(数论)
- JS中apply和call的用法
- Spring MVC URL路径映射
- 实例
- 部署cassandra 2.2.4集群配置
- UNP卷一学习笔记:POSIX信号处理
- UIKeyboardType
- java.io.Serializable浅析
- $.extend(),与$.fn.extend() 讲解(一)
- Problem E: 结构体---点坐标结构体
- mac rtx 更新组织架构
- MySQL数据库中如何使用rand随机查询记录
- Problem D: 分数减法——结构体
- 让提示小View随着按钮或者label的移动而移动,长短随着文字的长短而变化