Задача. Вычислить [latex]\prod_{i=1}^{10}{(2+\frac{1}{i!})}.[/latex]
По условию [latex]i[/latex] у нас изменяется от [1; 10], но, чтобы полностью убедиться, что программа правильно работает, изменим интервал, на котором изменяется[latex]i[/latex], к примеру [1; n].
Тест
i | f | p (wolframalpha) |
1 | 1 | 3 |
2 | 2 | 7.5 |
3 | 6 | 16.25 |
4 | 24 | 33.17708 |
5 | 120 | 66.630635 |
6 | 720 | 133.3538125486111 |
7 | 5040 | 266.7340841820129 |
8 | 40320 | 533.4747839927034 |
9 | 362880 | 1066.951038098899 |
10 | 3628800 | 2133.902370220902 |
Код программы на языке С++ :
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
#include <iostream> #include <math.h> int main() { double i, f = 1, p= 1; int n; scanf("%d",&n); for(int i = 1; i <= n; i++) { f = f * i; p *= ( 1 / f + 2); } printf("%f ", p); return 0; } |
Ссылка на код программы: http://ideone.com/DEEFJd
Решение задачи сводится к нахождению произведения [latex]p[/latex]. Присваиваем [latex]p = 1[/latex], [latex]f = 1[/latex]. Далее фиксируем значение [latex]i[/latex]:
8 |
for(int i = 1; i <= n; i++) |
Анализируем, [latex]f [/latex] увеличивается в зависимости от [latex]i[/latex], следовательно:
10 |
f = f * i; |
Следующим шагом будет вычисление искомого произведения — каждый последующий член вычисляем и умножаем на предыдущий:
11 |
p *= ( 1 / f + 2); |
Получаем ответ.
Код программы на языке Java:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 |
import java.util.*; import java.lang.*; import java.io.*; class Ideone { public static void main (String[] args) { double f = 1; double p = 1; Scanner in=new Scanner(System.in); int n = in.nextInt(); for(int i = 1; i <= n; i++) { f = f * i; p *= ( 1 / f + 2); } System.out.println(p); } } |
Ссылка на программу: http://ideone.com/JzB87V
Почти хорошо.
— Одно маленькое замечание — неправильный отступ в 13-й строке.
— И одно большое — все тесты кроме первых двух обман. Вместо тестов рассчитанных в wolframalpha.com (или в каком-либо другом пакете) Вы просто указали результаты работы Вашей программы. Результаты, конечно, отличаются не очень сильно. Но вполне достаточно, чтобы обман обнаружился. Зачем это делать? Оставили бы первые два и то лучше было бы.
Что делать?
— Сосчитайте для 5, 10, 13 и 17 в wolframalpha.com.
— Поставьте отступ.
— Примите решение никогда не обманывать преподавателей если Вам это невыгодно.
— Что означает «пройдено»? Ваша программы выдаёт на печать эти числа? Это же не правда.
— Вы сосчитали в wolframalpha.com не произведение, а только последний сомножитель.
— Лучше использовать double вместо float.
— Счётчик цикла (i) лучше сделать целочисленным.
— Отступы.
Засчитано