Дана действительная квадратная матрица порядка 9. Вычислить сумму тех из её элементов, расположенных на главной диагонали и выше неё, которые превосходят по величине все элементы, расположенные ниже главной диагонали. Если на главной диагонали и выше неё нету элементов с указанным свойством, то ответом должно служить сообщение об этом.
1 | 3 | 1 | 1 | 1 | 1 | 1 | 1 | 2 | |
1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | |
1 | 1 | 1 | 1 | 1 | 4 | 1 | 1 | 1 | |
1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | |
1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 5 | |
1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | |
1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | |
1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | |
1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | |
Ответ | 14 |
1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | |
1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | |
1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | |
1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | |
1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | |
1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | |
1 | 1 | 2 | 1 | 1 | 1 | 1 | 1 | 1 | |
1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | |
1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 |
Ответ | Нету элементов с такими свойствами |
Находим наибольший из нижних элементов (элементы, расположенные ниже главной диагонали). Потом сравниваем каждый элемент верхнего множества (элементы, расположенные выше главной диагонали и на самой диагонали) с наибольшим элементов ([latex]bigger[/latex]) всех нижних элементов и если это число больше, то прибавляем это число к переменной [latex]summa[/latex].
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 |
#include <iostream> using namespace std; int main() { int size = 9; bool ok = false; double mat[size][size];//Матрица 9 на 9 for(int vert = 0;vert < size;vert++)//вводим матрицу { for(int gor = 0;gor < size;gor++) { cin >> mat[vert][gor]; } } double bigger = mat[1][0],summa = 0.0;//bigger (наибольший элемент нижжней треугольнйо матрицы диагонали) for(int vert = 1;vert < size;vert++)//(Находим этот элемент) { for(int gor = 0;gor < vert;gor++) { if(bigger < mat[vert][gor]){ bigger = mat[vert][gor]; } } } for(int vert=0;vert < size;vert++)//Проверка каждого диагонального элемента и элементов выше диагонали,на то,больше ли он bigger или нет,и если больше,то увеличиваем переменную summa на этот элемент { for(int gor=vert;gor < size;gor++) { if(mat[vert][gor] > bigger) { ok = true; summa+=mat[vert][gor]; } } } if(ok)//Провека для вывода ответа { cout << summa; } else { cout << "Нету элементов с такими свойствами"; } return 0; } |
Java
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 |
/* package whatever; // don't place package name! */ import java.util.*; import java.lang.*; import java.io.*; /* Name of the class has to be "Main" only if the class is public. */ class Ideone { public static void main (String[] args) throws java.lang.Exception { Scanner in = new Scanner(System.in); int size = 9; boolean ok = false; double[][] mat = new double[size][size];//Матрица 9 на 9 for(int vert = 0;vert < size;vert++)//вводим матрицу { for(int gor = 0;gor < size;gor++) { mat[vert][gor] = in.nextDouble(); } } double bigger = mat[1][0],summa = 0.0;//bigger (наибольший элемент нижжней треугольнйо матрицы диагонали) for(int vert = 1;vert < size;vert++)//(Находим этот элемент) { for(int gor = 0;gor < vert;gor++) { if(bigger < mat[vert][gor]){ bigger = mat[vert][gor]; } } } for(int vert=0;vert < size;vert++)//Проверка каждого диагонального элемента и элементов выше диагонали,на то,больше ли он bigger или нет,и если больше,то увеличиваем переменную summa на этот элемент { for(int gor=vert;gor < size;gor++) { if(mat[vert][gor] > bigger) { ok = true; summa+=mat[vert][gor]; } } } if(ok)//Провека для вывода ответа { System.out.println(summa); } else { System.out.println("Нету элементов с такими свойствами"); } } } |
«считаем сумму всех нижних элементов» — зачем?
«Превосходит все» означает «больше каждого», а не «больше суммы всех». Например, чемпион мира по боксу в своем весе сильнее всех, т.е. каждого в своем весе. Но он не сможет побить всех людей одновременно 🙂
Приятная новость — программа работает. Неприятная новость — она работает неправильно. Вы утверждаете, что элементов нет, а проверяете равенство нулю их суммы. Если бы все элементы были положительными (как в Ваших слабых тестах), то так оно и было бы. Для действительных чисел это не так.
И еще
1. В тестах присутствует не более одного элемента подлежащего суммированию. Это не позволяет проверить работоспособность программы.
2. В коде часто используется «волшебное число 9». Нужно описать константу со значением 9 и пользоваться ею.
Принято.
Недостатки (кроме пробелов):
— вместо условного оператора на 8 дополнительных строк для печати результата лучше использовать тернарную операцию в два дополнительных символа.
— переменная summa объявлена и инициализирована далеко от циклов в которых используется, это ухудшает восприятие кода.
Засчитал 5 баллов (вместо 3 изначальных по экспресс проверке).