搜到的360面试题,写在这里作为小抄
输入输出
矩阵的元素为此格子内小方框个数
输入:
22:数组行列数
21:第一行
11:第二行
输出:
20:表面积
计算思路
上下面:
矩阵大小
左右面/前后面:
“外框”不会被遮住,
在两个柱子的界面上,露出的面积是高度差,分别计算左右向界面和前后向界面
实现
说实话我是真的忘了动态数组,百度了半天
其他的都是思路问题了不难的
如果晚上不考这题我就凉了特此留念
#include <iostream>
#include <vector>
using namespace std;
int main() {
//接受数组大小
int m = 0, n = 0;
cin >> m >> n;
//申请空间
int** tmp = new int* [m*n];
for (int i = 0; i < m*n; i++){
tmp[i] = new int[n];
}
//接收数组内容
for (int i = 0; i < m; i++) {
for (int j = 0; j < n; j++) {
cin >> tmp[i][j];
}
}
int topBottum = 2 * m * n;
//计算
int leftRight = 0;
for (int i = 0; i < m; i++) {
for (int j = 1; j < n; j++) {
leftRight += abs(tmp[i][j] - tmp[i][j - 1]);
}
}
for (int i = 0; i < m; i++) {
leftRight += tmp[i][0];
leftRight += tmp[i][n - 1];
}
int upDown = 0;
for (int i = 1; i < m; i++) {
for (int j = 0; j < n ; j++) {
upDown += abs(tmp[i][j] - tmp[i-1][j ]);
}
}
for (int i = 0; i <n; i++) {
upDown += tmp[0][i];
leftRight += tmp[m-1][i];
}
//验证数组输入是否成功
/*
for (int i = 0; i < m; i++) {
for (int j = 0; j < n; j++) {
cout<<tmp[i][j];
}
}
*/
//输出计算结果
int all = topBottum + leftRight + upDown;
cout << all;
//释放申请的空间
for (int i = 0; i < m*n; i++){
delete[] tmp[i];
}
delete[]tmp;
return 0;
}