Задача Вычислить: [latex]-\frac{a_1}{1!}+\frac{a_2}{2!}-…+\frac{(-1)^na_n}{n!}[/latex]
Тест
n | последовательность | sum(wolframalpha) |
2 | 0 0 | 0 |
2 | 5 8 | -1 |
3 | 5 8 12 | -3 |
4 | 1 2 3 24 | 1 |
5 | 0 0 0 2 3 | 0, 058333 |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 |
#include <iostream> #include <math.h> using namespace std; int main() { int n; cin >> n; int a[n]; for (int i=0; i<n; i++) { cin >> a[i]; } double sum=0; int f=1; for (int i=1; i<=n; i++) { f*=i; double sign = (i%2==0) ? 1 : -1; sum+=(sign*a[i-1])/f; } cout << sum << endl; return 0; } |
Решение:
В этой задаче главное правильно расставить знаки, так как это повлияет на результат.Поэтому мы заводим переменную [latex]sign[/latex], которая будет следить за знаком. Далее проверяем чётность, если элемент делиться на 2 без остатка, то он получает знак [latex]+[/latex], в противном случае [latex]-[/latex]:
16 |
double sign = (i%2==0) ? 1 : -1; |
Описываем факториал:
14 15 |
for (int i=1; i<=n; i++) { f*=i; |
Выполняем суммирование и делим на факториал:
17 |
sum+=(sign*a[i-1])/f; |
Вводим в [latex]input[/latex] количество элементов ([latex]n[/latex]) и сами элементы.Получаем ответ.
Вам не кажется странным, что все числа получились целыми? Как минимум, в тесте
0 0 0 2 3
должно получиться дробное число. Секрет в целочисленном делении. int / int = int
Дополню Олега: долго пытался понять, что у Вас в таблице тестов записано. Заголовок колонки -\frac{a_1}{1!}+\frac{a_2}{2!}-…+\frac{(-1)^na_n}{n!} сбивает с толку, лучше или написать «последовательность» или формулу a_1 a_2 … a_n (записать, например, так [latex]a_1\ a_2\ \ldots\ a_n[/latex]
Исправила
Пожалуйста, не ставьте задачу на повторную проверку пока не исправите замечания. … и нужно что-то отвечать преподавателям
Исправила.
— Последний тест неверен. Разберитесь, пожалуйста.
0 0 0 2 3 0, 04666
Исправила.
зачтено