Условие задачи:
Даны действительные числа [latex]a_{1}, \ldots, a_{n}, b_{1}, \ldots, b_{n}[/latex]. Члены последовательности [latex]c_{1}, \ldots, c_{n+1}[/latex] связаны с членами данных последовательностей соотношениями [latex]c_{n+1}=0, c_{\left (n+1\right )-i}=\frac{a_{\left (n+1\right )-i}}{b_{\left (n+1\right )-i}-c_{\left (n+1\right )-i+1}} \left (i=1, \ldots, n \right ).[/latex] Получить [latex]c_{1}, \ldots, c_{n+1}[/latex].
Входные данные:
В первой строке задано число [latex]n[/latex]. В последующих строках записано две числовые последовательности из n чисел.
Выходные данные:
Вывести результирующую последовательность [latex]c[/latex], найденную согласно условию задачи.
Тесты:
Входные данные | Выходные данные | |
28 | 100 23 45 62 17 873 46 927 64 5 8 9 3 0 89 73 12 53 62 7 12 35 64 50 227 23 100 80 12 34 23 6 7 8 9 25 10 9 73 24 27 8 4 3 2 0 9 1 45 62 100 104 5 6 14 21 |
8.89145197864941 0.7532429753739995 3.46536409638595 10.014351523139867 -0.19111480725820545 95.9517680178081 -1.0983211464949347 50.88210356032888 6.781413598577088 0.5624396639914702 0.11015755091584475 0.3767441860465116 0.1111111111111111 0.0 4.803215151847447 -14.529255339679752 8.024345590557227 0.5045509487875016 -105.04390117066583 9.590229411789153 0.2700904535823736 0.5704400476332376 0.6438589905891021 0.5993533748082496 20.57676071984004 -6.031862745098037 9.813084112149534 3.8095238095238093 0.0 |
10 | 2 -4 1 2 45.2 34 -23 34 56 7.09 -3.4 4 4 -5 2.4 34.04 23 567 -3 4 |
-0.8567913942992066 -1.0657095142326265 0.24663198875517678 -0.05462407795229777 31.61389033873605 0.9702487256173882 -1.0025608427005548 0.05874893533055214 -11.733892090099529 1.7725 0.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 35 36 37 |
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=in.nextInt(); double[] A = new double[n]; double[] B = new double[n]; double[] C = new double[n+1]; String ans = new String(""); double inf = 1.0 / 0; C[n] = 0.0; int k=0; while(k<n){ A[k] = in.nextDouble(); k++; } String c=in.nextLine(); int t=0; while(t<n){ B[t]=in.nextDouble(); t++; } for (int i=1; i<=n; i++){ if(B[n-i]-C[n-i+1]!=0) C[n-i]=A[n-i]/(B[n-i]-C[n-i+1]); else C[n-i]=inf; } for (int i=0; i<=n; i++){ ans+=Double.toString(C[i])+" "; } System.out.println(ans); } } |
Алгоритм решения:
Узнаем количество необходимых элементов: считаем число [latex]n[/latex]. С помощью двух циклов также считаем все элементы массивов [latex]a[/latex] и [latex]b[/latex]. Заведем еще один счетчик для нахождения значений ячеек нового массива, воспользовавшись нашей заданной формулой [latex]c_{\left (n+1\right )-i}=\frac{a_{\left (n+1\right )-i}}{b_{\left (n+1\right )-i}-c_{\left (n+1\right )-i+1}} \left (i=1, \ldots, n \right )[/latex] при условии, что [latex]c_{n+1}=0.[/latex] Выведем все элементы единой строкой.