Задача:
Даны натуральные числа n и m, действительное число r, действительная матрица размера nxm. Получить значение [latex]{b}_{1}{r}^{n-1}+{b}_{2}{r}^{n-2}+\dots+{b}_{n}[/latex], где [latex]{b}_{k}[/latex] — первый по порядку положительный элемент в k-й строке матрицы [latex](k=1,\dots,n)[/latex]; если в k-строке нет положительных элементов, то [latex]{b}_{k}=0.5[/latex].
Тесты:
nxm | r | Матрица | Результат | Комментарий |
2х2 | 2.5 | [latex]\begin{pmatrix} -1 & 1 \\ 1 & 0 \end{pmatrix}[/latex] | 3.5 | Пройдено |
3×4 | 3.14 | [latex]\begin{pmatrix}5.7 & 6.7 & -7.7 & 0.9\\-3.0 & 2.3 & -5.0 & -2.4\\6.7 & 3.5 & 0.0 & 4.4\end{pmatrix}[/latex] | 70.1 | Пройдено |
2×4 | 2.71 | [latex]\begin{pmatrix}-9.0 &-8.8 &-7.3 & 7.5\\-6.3 &-9.7 & 6.8 &-0.5\end{pmatrix}[/latex] | 27.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 |
#include <iostream> #include <math.h> using namespace std; int main() { int n,m; scanf("%d %d",&n,&m); double r; scanf("%lf",&r); double a[n][m]; for(int i = 0; i < n; i++) for(int j = 0; j < m; j++) scanf("%lf", &a[i][j]); double sum = 0; for(int i = 0; i < n; i++) { double b = 0.5; for(int j = 0; j < m; j++) if(a[i][j]>0) { b = a[i][j]; break; } sum += b*pow(r,n-i-1); } printf("%lf",sum); return 0; } |
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 |
import java.util.*; import java.lang.*; import java.io.*; class Main { static Scanner sc = new Scanner(System.in); public static void main (String[] args) throws java.lang.Exception { int n, m; n = sc.nextInt(); m = sc.nextInt(); double r = sc.nextDouble(); double[][] a = new double[n][m]; for(int i = 0; i < n; i++){ for(int j = 0; j < m; j++){ a[i][j] = sc.nextDouble(); } } double sum = 0; for(int i = 0; i < n; i++){ double b = 0.5; for(int j = 0; j < m; j++){ if(a[i][j] > 0){ b = a[i][j]; break; } } sum += b*Math.pow(r, n-i-1); } System.out.println(sum); } } |
Идея решения:
Считать n, m как целочисленные переменные. После этого считать r как переменную типа double. Следующим считать массив nxm созданный благодаря генератору матриц из случайных чисел заданного размера. Завести переменную [latex]sum = 0[/latex] для хранения результата. Проверять построчно каждый столбик на наличие положительного числа и прибавить первое положительное число в строке, умноженное на [latex]{r}^{n-i-1}[/latex], к результаты. В случает отсутствия положительного элемента в строке, брать 0.5. В конце вывести результат.
Как и многие задачи (якобы) для работы с матрицами эта создания матрицы не требует. Скорее это задача на потоковые вычисления. Однако Вы правильно поступили в соответствии с темой и использовали двумерные массивы.
Зачтено.
Так?
Java версия засчитана, 10 баллов.