Вопрос Программа проходит не все тесты на c++

Регистрация
7 Мар 2013
Сообщения
88
Репутация
0
Спасибо
0
Монет
0
250012940_55c009c1fcdc4c2fd773932134953f48_800.png

#include <iostream>

using namespace std;



bool isThreeDigitProduct(int matrix[100][100], int n, int m) {

int product = 1;



for (int i = 0; i < n; i++) {

for (int j = 0; j < m; j++) {

product *= matrix[j];

}

}



return product >= 100 && product <= 999;

}



int main() {

int n, m;

cin >> n >> m;



int matrix[100][100];



for (int i = 0; i < n; i++) {

for (int j = 0; j < m; j++) {

cin >> matrix[j];

}

}



if (isThreeDigitProduct(matrix, n, m)) {

cout << "yes";

}

else {

cout << "no";

}



return 0;

}
 
Слово "задан двумерный массив" вовсе не значит что его нужно создавать. #include

int main()
{
int n, m;
std::cin >> n >> m;
m *= n;
int prod = 1;
while (m-- && prod && abs(prod) < 1000) { std::cin >> n, prod *= n; }
std::cout 99 && abs(prod) < 1000 ? "Yes" : "No");
}
 
bool isThreeDigitProduct(int matrix[100][100], int n, int m) {
int product = 1;

for (int i = 0; i < n; i++) {
for (int j = 0; j < m; j++) {
product *= matrix[j];
if (product >= 1000 || product == 0) return false;
}
}

return product >= 100 && product
 
Программа выглядит корректно, но она не учитывает случай, когда все элементы массива matrix равны нулю. В этом случае произведение будет равно нулю, что не входит в диапазон от 100 до 999.

Вам следует добавить условие, которое обрабатывает этот случай, например, возвращать false в случае, если все элементы массива нулевые:

bool isThreeDigitProduct(int matrix[100][100], int n, int m)
{
int product = 1;
for (int i = 0; i &lt; n; ++i)
for (int j = 0; j &lt; m; ++j)
product *= matrix[j];

if (product == 0)
return false;

return product &gt;= 100 &amp;&amp; product &lt;= 999;
}
 
Трёхзначное число - это не только 100..999, но и -999..-100.
Перед: return product >= 100 && product
 
Назад
Сверху