Задача. Дана действительная квадратная матрица порядка n. Построить последовательность действительных чисел [latex]a_{1}\cdots a_{n}[/latex] по правилу: если в i-й строке матрицы элемент, принадлежащий главной диагонали, отрицателен, то [latex]a_{i}[/latex] равно сумме элементов i-й строки, предшествующих первому отрицательному элементу, в противном случае [latex]a_{i}[/latex] равно сумме последних элементов i-й строки, начиная с первого по порядку неотрицательного элемента.
Тесты:
Данная матрица | Последовательность | Комментарий |
[latex]\begin{Vmatrix}1 & 2 & -3 & 4\\ 3 & 5 & 6 & 7\\ 1 & 3 & 0 & 6\\ -5 & 7 & 2 & -9\end{Vmatrix}[/latex] | 4 21 10 0 | Пройден |
[latex]\begin{Vmatrix}1 & -2 & 3\\ -7 & -3 & 0\\ 5 & 5 & 2 \end{Vmatrix}[/latex] | 2 0 12 | Пройден |
[latex]\begin{Vmatrix}7 & 7 & 9 & 3\\ 0 & 5 & 0 & 7\\ 4 & 7 & -7 & 2\\ 1 & -4 & 8 & -3\end{Vmatrix}[/latex] | 26 12 11 1 | Пройден |
Код программы:
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 |
#include<iostream> using namespace std; int main() { int n; cin>>n; int **a = new int*[n]; for (int i=0;i<n;i++) a[i] = new int [n]; int *b = new int [n]; for(int i = 0; i < n; i++){ a[i] = new int [n]; b[i] = 0; for(int j = 0; j < n; j++){ cin>>a[i][j]; } } for(int i = 0; i < n; i++){ if(a[i][i] < 0){ for(int j = 0; j < i; j++){ if(a[i][j] < 0) break; b[i]+=a[i][j]; } } else{ int k; for(k = 0; k < n; k++){ if(a[i][k] >= 0) break; } for(int j = k; j < n; j++){ b[i]+=a[i][j]; } } } for(int i = 0; i < n; i++){ cout<<b[i]<<" "; } } |
Для начала мы должны обнулить матрицу [latex]b_{1}\cdots b_{n}[/latex], элементы которой являются суммами элементов i-х строк входной матрицы, которую мы также задаем. А далее, с помощью циклов for , можно оценить диагональные элементы заданной матрицы. И следуя условию, если они отрицательные, то в [latex]b_{i}[/latex] мы просуммируем все элементы данной строки, если они положительные, до первого отрицательного в строчке, а если они положительные, то [latex]b_{i}[/latex] будет равно сумме последних элементов строки (т.е. после диагонального) начиная с первого по порядку неотрицательного элемента. И в конце выводим конечную последовательность [latex]b_{1}\cdots b_{n}[/latex].
Код можно проверить здесь.
Решение на 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 |
import java.util.*; import java.lang.*; import java.io.*; class Ideone { public static void main (String[] args) throws java.lang.Exception { Scanner in = new Scanner(System.in); int n; n = in.nextInt(); int a[][]; int b[] = new int [n]; a = new int[n][]; for(int i = 0; i < n; i++){ a[i] = new int [n]; b[i] = 0; for(int j = 0; j < n; j++){ a[i][j] = in.nextInt(); } } for(int i = 0; i < n; i++){ if(a[i][i] < 0){ for(int j = 0; j < i; j++){ if(a[i][j] < 0) break; b[i]+=a[i][j]; } } else{ int k; for(k = 0; k < n; k++){ if(a[i][k] >= 0) break; } for(int j = k; j < n; j++){ b[i]+=a[i][j]; } } } for(int i = 0; i < n; i++){ System.out.print(b[i] + " "); } } } |
Код на Java.
Во первых, можно было написать
int a[][] = new int[n][n]; и упростить создание двухмерного массива.
Во вторых, для второго теста ответ записан «3 0 12».
C++ программа выводит «3 0 0».
Java программа выводит «2 0 12» ссылку вы не дали, вот она.
Пока оценка -5 за попытку подлога! (минус 5 баллов).
Исправляйте отчет, программу, расписывайте расчеты вручную!
Задача исправлена, теперь оценка 5 баллов, а не минус 5 баллов.