面试题答案
一键面试#include <iostream>
#include <cstdlib>
#include <ctime>
#include <algorithm>
// 用随机数填充三维数组
void fillCube(int cube[][3][4], int size1, int size2, int size3) {
srand(static_cast<unsigned int>(time(nullptr)));
for (int i = 0; i < size1; ++i) {
for (int j = 0; j < size2; ++j) {
for (int k = 0; k < size3; ++k) {
cube[i][j][k] = rand() % 100 + 1;
}
}
}
}
// 找出符合条件的元素并排序
std::pair<int*, int> findAndSort(int cube[][3][4], int size1, int size2, int size3) {
int count = 0;
// 计算符合条件元素的数量
for (int i = 0; i < size1; ++i) {
for (int j = 0; j < size2; ++j) {
for (int k = 0; k < size3; ++k) {
if (cube[i][j][k] > 50 && cube[i][j][k] % 3 == 0) {
++count;
}
}
}
}
int* result = new int[count];
int index = 0;
// 填充符合条件的元素到新数组
for (int i = 0; i < size1; ++i) {
for (int j = 0; j < size2; ++j) {
for (int k = 0; k < size3; ++k) {
if (cube[i][j][k] > 50 && cube[i][j][k] % 3 == 0) {
result[index++] = cube[i][j][k];
}
}
}
}
// 从大到小排序
std::sort(result, result + count, [](int a, int b) { return a > b; });
return {result, count};
}
int main() {
int cube[2][3][4];
fillCube(cube, 2, 3, 4);
auto [result, size] = findAndSort(cube, 2, 3, 4);
std::cout << "符合条件的元素(从大到小): ";
for (int i = 0; i < size; ++i) {
std::cout << result[i] << " ";
}
std::cout << std::endl;
delete[] result;
return 0;
}
上述代码包含以下几个部分:
- 填充函数
fillCube
:使用随机数填充三维数组,随机数范围是1到100。 - 查找和排序函数
findAndSort
:接收三维数组及其每一维大小作为参数,找出能被3整除且大于50的元素,将它们按从大到小顺序存储在新的一维数组中,并返回新数组及其大小。 - 主函数
main
:测试上述功能,打印出符合条件的元素。