zoj 3930 Dice Notation 模拟

题目链接:http://acm.zju.edu.cn/onlinejudge/showProblem.do?problemCode=3930

比较简单的模拟题

  1 #include <bits/stdc++.h>
  2 using namespace std;
  3 int T;
  4 string s;
  5 vector <string> v;
  6 int main()
  7 {
  8     scanf("%d", &T);
  9     getchar();
 10     while(T--)
 11     {
 12         getline(cin, s);
 13         v.clear();
 14 
 15         for(int i = 0; i < s.size(); i++)
 16         {
 17             if(s[i] == ')' || s[i] == '(') continue;
 18             else if(s[i] == ' ') continue;
 19             else if(s[i] == '*' || s[i] == '/' || s[i] == '+'
 20                     || s[i] == '-') continue;
 21 
 22             if(s[i] == 'd')
 23             {
 24                 string sz = "";
 25                 int j;
 26                 for(j = i+1; j < s.size(); j++)
 27                 {
 28                     if(!isdigit(s[j])) break;
 29                     else sz += s[j];
 30                 }
 31                 i = j-1;
 32                 string ans = "[d";
 33                 ans += sz; ans += "]";
 34                 v.push_back(ans);
 35             }
 36             else if(isdigit(s[i]))
 37             {
 38                 bool isdig = true;
 39                 int j;
 40 
 41                 string temp =""; temp += s[i];
 42                 for(j = i+1; j < s.size(); j++)
 43                 {
 44                     if(s[j] == ')' || s[j] == '(') break;
 45                     else if(s[j] == ' ') break;
 46                     else if(s[j] == '*' || s[j] == '/'
 47                     || s[j] == '+' || s[j] == '-') break;
 48                     
 49                     else if(s[j] == 'd')
 50                     {
 51                         isdig = false;
 52                         temp += s[j];
 53                     }
 54                     else if(isdigit(s[j]))
 55                     {
 56                         temp += s[j];
 57                     }
 58                 }
 59 
 60                 i = j-1;
 61 
 62                 if(isdig == true) v.push_back(temp);
 63                 
 64                 else if(isdig == false)
 65                 {
 66                     long long cnt = 0;
 67                     long long mul = 1;
 68                     string sz = "";
 69                     string last = "[d";
 70                     int posd;
 71                     for(int j = 0; j < temp.size(); j++)
 72                     {
 73                         if(temp[j] == 'd') 
 74                         {
 75                             posd = j; break;
 76                         }
 77                         else sz += temp[j];
 78                     }
 79                     
 80                     for(int j = sz.size()-1; j >= 0; j--)
 81                     {
 82                         cnt += (sz[j]-'0')*mul;
 83                         mul *= 10;
 84                     }
 85 
 86                     for(int j = posd+1; j < temp.size(); j++)
 87                     {
 88                         last += temp[j];
 89                     }
 90                     last += ']';
 91                     
 92                     string ans;
 93                 /*    if(cnt == 0)
 94                     {
 95                         v.push_back("");
 96                         continue;
 97                     }*/
 98                     if(cnt > 1) ans = "(";
 99                     else ans = "";
100                     for(int j = 1; j <= cnt; j++)
101                     {
102                         if(j == 1) ans += last;
103                         else 
104                         {
105                             ans += " + "; ans += last;
106                         }
107                     }
108                     if(cnt > 1) ans += ")";
109                     v.push_back(ans);
110                 }
111             }
112         }
113         /*cout<<"Case "<<T<<endl;
114         for(int i = 0; i < v.size(); i++)
115         {
116             cout<<v[i]<<endl;
117         }*/
118 
119         int cnt = 0;
120         for(int i = 0; i < s.size(); i++)
121         {
122             if(s[i] == ')' || s[i] == '(') printf("%c", s[i]);
123             else if(s[i] == '+' || s[i] == '-' || s[i] == '*' || s[i] == '/') 
124             {
125                 printf(" %c ", s[i]);
126             }
127             else if(s[i] == ' ') continue;
128             else if(s[i] == 'd' || isdigit(s[i]))
129             {
130                 cout<<v[cnt]; cnt++;
131                 int j;
132                 for(j = i+1; j < s.size(); j++)
133                 {
134                     if(s[j] == ')' || s[j] == '(' || s[j] == '+' || s[j] == '-' || s[j] == '*' || s[j] == '/') break;
135                 }
136                 i = j-1;
137             }
138         }
139         printf(" = [Result]
");
140     }
141     return 0;
142 }
原文地址:https://www.cnblogs.com/titicia/p/5382783.html