UVa 10033

  题目大意:模拟题,有一些寄存器和随机访问内存,给你一些指令以及它们代表的操作,模拟操作即可。

 1 #include <cstdio>
 2 #include <cstring>
 3 #define REGN 10
 4 #define RAMN 1000
 5 
 6 int reg[REGN], ram[RAMN];
 7 
 8 int main()
 9 {
10 #ifdef LOCAL
11     freopen("in", "r", stdin);
12     //freopen("out", "w", stdout);
13 #endif
14     int n;
15     scanf("%d", &n);
16     getchar();
17     char s[100];
18     fgets(s, sizeof(s), stdin);
19     bool first = true;
20     while (n--)
21     {
22         memset(ram, 0, sizeof(ram));
23         int k = 0;
24         while (fgets(s, sizeof(s), stdin))
25         {
26             if (s[0] == '
')   break;
27             sscanf(s, "%d", &ram[k]);
28             k++;
29         }
30         int p = 0;         // p point to the location that will execute
31         int cnt = 0;
32         memset(reg, 0, sizeof(reg));
33         bool end = false;
34         while (!end)
35         {
36             //printf("%d
", ram[p]);
37             int hund = ram[p] / 100;
38             int ten = (ram[p] % 100) / 10;
39             int unit = ram[p] % 10;
40             cnt++;
41             switch(hund)
42             {
43                 case 1:
44                     if (ram[p] == 100) 
45                     {
46                         end = true;
47                         break;
48                     }
49                 case 2:
50                     reg[ten] = unit;
51                     p++;
52                     break;
53                 case 3:
54                     reg[ten] += unit;
55                     reg[ten] %= 1000;
56                     p++;
57                     break;
58                 case 4:
59                     reg[ten] *= unit;
60                     reg[ten] %= 1000;
61                     p++;
62                     break;
63                 case 5:
64                     reg[ten] = reg[unit];
65                     p++;
66                     break;
67                 case 6:
68                     reg[ten] += reg[unit];
69                     reg[ten] %= 1000;
70                     p++;
71                     break;
72                 case 7:
73                     reg[ten] *= reg[unit];
74                     reg[ten] %= 1000;
75                     p++;
76                     break;
77                 case 8: 
78                     reg[ten] = ram[reg[unit]];
79                     p++;
80                     break;
81                 case 9:
82                     ram[reg[unit]] = reg[ten];
83                     p++;
84                     break;
85                 case 0:
86                     if (reg[unit] != 0)   p = reg[ten];
87                     else p++;
88                     break;
89             }
90         }
91         if (first)   first = false;
92         else printf("
");
93         printf("%d
", cnt);
94     }
95     return 0;
96 }
View Code

  第一次没在输出之间加一个空行,WA了,又粗心了...同时,又一次疑惑,uva对这种情况是判别为WA而不是PE吗?

原文地址:https://www.cnblogs.com/xiaobaibuhei/p/3187960.html