Дана квадратная матрица порядка [latex]n[/latex].
Получить вектор [latex]Ab[/latex], где [latex]b[/latex]-вектор, элементы которого вычисляются по формуле: [latex]{b}_{i}={\frac{1}{{i}^{2}+2}}[/latex], где [latex]i=1,2,\dots,n[/latex].
2 |
|
|
Пройдено | ||||||
2 |
|
|
Пройдено |
При рассмотрении ряда квадратов чисел [latex](1, 4 , 9, \dots)[/latex], заметно, что числа следующей степени увеличиваются на четные числа, при этом модификатор предыдущего элемента на [latex]2[/latex] меньше чем следующего.
Все что нам остается сделать, это добавить генерацию вектора [latex]b[/latex], через модифицирующий элемент (преимущества которого состоят в частности, в том, что мы намного ускоряем вычисления квадратов, используя уже имеющиеся нас данные), в первый цикл (цикл ввода матрицы [latex]a[/latex]), а во втором цикле уже организовать вывод и вычисление собственно результирующего вектора.
Код программы: http://ideone.com/bl2iJE.
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 |
#include <cstdlib> #include <iostream> using namespace std; int main(){ int n; cin >> n; double a[n][n], b[n], res[n]; int modif = 1; // переменная ускоряющая поиск квадрата i int y = 0; for( int i=0 ; i<n ; i++, modif+=2 ){ // res[i] = 0; y += modif; // модифицируем переменную возведения в тепень b[i] = 1.0/(y+2); // генерируем b[i] for( int j=0 ; j<n ; j++ ){ // cin >> a[i][j]; } } for( int i=0 ; i<n ; i++ ){ // задает A for( int j=0 ; j<n ; j++ ){ // задает смещение суммы res[i] += a[i][j]*b[j]; } cout << res[i] << (i+1 == n ? '\n' : ' '); } } |