ZOJ Problem Set - 1051
http://acm.zju.edu.cn/onlinejudge/showProblem.do?problemId=51
看懂题目,搞清楚输出格式,剩下的就应该没难点了。
#include <iostream>
using namespace std;
int main()
{
int loop, cnt1, cnt2, scr = 0;
int Days, K;
int D[16], Density[22][22], delta[20][20];
char Ch[4] = {'.', '!', 'X', '#'};
cin >> loop;
while(loop--) {
scr++;
if(scr > 1) cout << endl;
cin >> Days;
for(cnt1 = 0;cnt1 < 16;cnt1++)
cin >> D[cnt1];
for(cnt1 = 0;cnt1 < 22;cnt1++) {
for(cnt2 = 0;cnt2 < 22;cnt2++) {
if(cnt1 == 0 || cnt2 == 0
|| cnt1 == 21 || cnt2 == 21) {
Density[cnt1][cnt2] = 0;
} else { cin >> Density[cnt1][cnt2]; }
}
}
while(Days>0) {
for(cnt1 = 1;cnt1 < 21;cnt1++) {
for(cnt2 = 1;cnt2 < 21;cnt2++) {
K = Density[cnt1][cnt2]
+ Density[cnt1-1][cnt2]
+ Density[cnt1][cnt2-1]
+ Density[cnt1+1][cnt2]
+ Density[cnt1][cnt2+1];
delta[cnt1-1][cnt2-1] = D[K];
}
}
for(cnt1 = 1;cnt1 < 21;cnt1++) {
for(cnt2 = 1;cnt2 < 21;cnt2++) {
Density[cnt1][cnt2] += delta[cnt1-1][cnt2-1];
if(0 > Density[cnt1][cnt2])
Density[cnt1][cnt2] = 0;
if(3 < Density[cnt1][cnt2])
Density[cnt1][cnt2] = 3;
}
}
Days--;
}
for(cnt1 = 1;cnt1 < 21;cnt1++) {
for(cnt2 = 1;cnt2 < 21;cnt2++) {
cout << Ch[Density[cnt1][cnt2]];
}
cout << endl;
}
}
return 0;
}