模拟题

View Code
  1 #include <cstdio>
  2 #include <cstring>
  3 
  4 int m, n;
  5 char map[76][76];
  6 
  7 void swap(int &x, int &y)
  8 {
  9      int tmp = x;
 10      x = y, y = tmp;
 11 }
 12 
 13 void print()
 14 {
 15      for (int i=0; i<m; i++)
 16      {
 17          if(!i) printf("+");
 18          printf("-");
 19      }
 20      printf("+\n");
 21      for(int i=0; i<n; i++)
 22      {
 23          for(int j=0; j<m; j++)
 24          {
 25             if(!j) printf("|");
 26             printf("%c", map[i][j]);
 27          }
 28          printf("|\n");
 29      }
 30      for(int i=0; i<m; i++)
 31      {
 32         if(!i) printf("+");
 33         printf("-");
 34      }
 35      printf("+\n\n");
 36 }
 37 
 38 void fix(int x, int y, char c)
 39 {
 40      if(map[x][y] == c) return;
 41      else if(map[x][y] == ' ') map[x][y] = c;
 42      else if((map[x][y] == '-' || map[x][y] == '+') && c == '|') map[x][y] = '+';
 43      else if((map[x][y] == '|' || map[x][y] == '+') && c == '-') map[x][y] = '+';
 44      else if((map[x][y] == '\\' || map[x][y] == 'x') && c == '/') map[x][y] = 'x';
 45      else if((map[x][y] == '/' || map[x][y] == 'x') && c == '\\') map[x][y] = 'x';
 46      else map[x][y] = '*';
 47 }
 48 
 49 void point(int x, int y)
 50 {
 51      fix(y, x, 'o');
 52 }
 53 
 54 void clear(int x1, int y1, int x2, int y2)
 55 {
 56      if(x1 > x2) swap(x1, x2);
 57      if(y1 > y2) swap(y1, y2);
 58      for(int i=y1; i<=y2; i++)
 59      {
 60         for(int j=x1; j<=x2; j++)
 61                 map[i][j] = ' ';
 62      }
 63 }
 64 
 65 void line(int y1, int x1, int y2, int x2)
 66 {
 67      if(x1 == x2)
 68      {
 69            if(y1 > y2) swap(y1, y2);
 70            for(int i=y1; i<=y2; i++)
 71                    fix(x1, i, '-');
 72      }
 73      else if(y1 == y2)
 74      {
 75           if(x1 > x2) swap(x1, x2);
 76           for(int i=x1; i<=x2; i++)
 77           fix(i, y1, '|');
 78      }
 79      else
 80      {
 81          if(x1 > x2)
 82          {
 83             swap(x1, x2);
 84             swap(y1, y2);
 85          }
 86          if(x1 < x2 && y1 < y2)
 87          {
 88                for(int i=0; i<=x2-x1; i++)
 89                        fix(x1+i, y1+i, '\\');
 90          }
 91          else
 92          {
 93              for(int i=0; i<=x2-x1; i++)
 94                      fix(x1+i, y1-i, '/');
 95          }
 96      }
 97 }
 98 
 99 void text(int y, int x, char *s)
100 {
101      int l = strlen(s);
102      for(int i=0; i<l; i++)
103      {
104              if(y+i > m) break;
105              fix(x, y+i, s[i]);
106      }
107 }
108 
109 int main()
110 {
111     char order[6], tex[80];
112     int x1, y1, x2, y2;
113     while(scanf("%d%d", &m, &n) && (m || n))
114     {
115          for(int i=0; i<n; i++)
116          {
117                  for(int j=0; j<m; j++)
118                     map[i][j] = ' ';
119          }
120     
121          while(scanf("%s", &order))
122          {
123               if(!strcmp(order, "LINE"))
124               {
125                   scanf("%d%d%d%d", &x1, &y1, &x2, &y2);
126                   line(x1-1, y1-1, x2-1, y2-1);
127               }
128               else if(!strcmp(order, "CLEAR"))
129               {
130                    scanf("%d%d%d%d", &x1, &y1, &x2, &y2);
131                    clear(x1-1, y1-1, x2-1, y2-1);
132               }
133               else if(!strcmp(order, "POINT"))
134               {
135                    scanf("%d%d", &x1, &y1);
136                    point(x1-1, y1-1);
137               }
138               else if(!strcmp(order, "TEXT"))
139               {
140                    scanf("%d%d%s", &x1, &y1, &tex);
141                    text(x1-1, y1-1, tex);
142               }
143               else
144               {
145                   print();
146                   break;
147               }
148          }
149     }
150     return 0;
151 }