zoukankan      html  css  js  c++  java
  • 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 }
  • 相关阅读:
    2.1 String的特性
    sql语句对列进行操作
    java 集合排序
    C#抽象类及其方法的学习
    haproxy+keepalived实现高可用负载均衡
    RPC框架简易实现
    WCF中的ServiceHost初始化两种方式
    C# Stopwatch与TimeSpan详解
    HBase入门篇
    nginx+tomcat+redis完成session共享
  • 原文地址:https://www.cnblogs.com/yifan2016/p/5261593.html
Copyright © 2011-2022 走看看