模拟题
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 }

浙公网安备 33010602011771号