C/C++

Задача C++ с двухмерными массивами

Помогите решить домашку, пожалуйста
Alik Alimov
Alik Alimov
152
#include <iostream>
using namespace std;
class Box {
public:
Box() : x(0), y(0) {}
Box(int x, int y) : x(x), y(y) {
if (x > y) swap(x, y);
}
void set(size_t row, size_t column, int value) {
if (value % x == 0 || value % y == 0) {
++multiples.first;
multiples.second += value;
}
if (value >= x && value <= y) {
++range.first;
range.second += value;
}
if (is_prime(value)) {
++prime.first;
prime.second += value;
}
if (column > row && value > 0) {
++top.first;
top.second += value;
}
}
private:
int x, y;
pair<size_t, int> multiples;
pair<size_t, int> range;
pair<size_t, int> prime;
pair<size_t, int> top;
bool is_prime(int x) {
bool prime;
if (x <= 1) prime = false;
else if (x <= 5 && (x <= 2 || x == 3 || x == 5)) prime = true;
else if (~x & 1 || 0 == x % 3 || 0 == x % 5) prime = false;
else {
int n;
for (n = 3; n * n <= x && x % n; n += 2) { ; }
prime = n * n > x? true : false;
}
return prime;
}
friend ostream& operator<<(ostream& out, const Box& box) {
out << box.multiples.first << ' ' << box.multiples.second << ' '
<< box.range.first << ' ' << box.range.second << ' '
<< box.prime.first << ' ' << box.prime.second << ' '
<< box.top.first << ' ' << box.top.second << '\n';
return out;
}
};
int main() {
const size_t m = 100U;
int a[m][m];
Box box[m];
size_t n;
cin >> n;
for (size_t i = 0U; i < n; ++i) {
for (size_t j = 0U; j < n; ++j) {
cin >> a[i][j];
}
}
int x, y;
cin >> x >> y;
puts("");
for (size_t j = 0U; j < n; ++j) {
Box item(x, y);
for (size_t i = 0U; i < n; ++i) {
item.set(i, j, a[i][j]);
}
box[j] = item;
}
for (size_t i = 0U; i < n; ++i) cout << box[i];
puts("");
}
Валерий Пантелеев
Валерий Пантелеев
73 334
Лучший ответ