題目類似於初中堆小方塊求三視圖,這裏求的是表面積。
輸入:
第一行是M、N,代表小方塊佔地面積是M*N的二維區域。
以下M行分別輸入每個位置小方塊的個數(即高度),也就是逐行輸入,
輸出:表面積(剛考完,無法保存圖)
測試用例:
輸入:
2 2
2 1
1 1
輸出:20
C++代碼
#include<iostream>
#include<vector>
#include<algorithm>
using namespace std;
int main()
{
int N, M;
while (cin>>N>>M)
{
vector<vector<int>> A(N, vector<int>(M, 0));
int S = 0;
for (int i = 0; i < N; i++)
{
for (int j = 0; j < M; j++)
{
cin >> A[i][j];
if (A[i][j] > 0)
{
S = S + 4 * A[i][j] + 2;//4個側面+上下兩個面
}
}
}
for (int i = 0; i < N; i++)
{
for (int j = 0; j < M-1; j++)
{
int mW = min(A[i][j], A[i][j + 1]);
S = S - 2 * mW;//減去左右方向重合的面
}
}
for (int i = 0; i < N - 1; i++)
{
for (int j = 0; j < M; j++)
{
int mH = min(A[i][j], A[i + 1][j]);
S = S - 2 * mH;//減去上下方向重合的面
}
}
cout << S << endl;
}
return 0;
}