Задача. Даны натуральное число [latex]n[/latex], действительные числа [latex]x_{1}, \cdot x_{n},(n\geq 3)[/latex]. Вычислить:
[latex](x_{1}+2x_{2}+x_{3})(x_{2}+2x_{3}+x_{4}) \cdot (x_{n-2}+2x_{n-1}+x_{n})[/latex].Тесты:
Ввод | Вывод | Комментарий |
6 1 1 1 1 1 1 | 256 | Пройден |
9 1 2 0 1 2 0 1 2 0 | 18000 | Пройден |
5 5 5 5 5 5 | 8000 | Пройден |
Код на С++
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 |
#include <iostream> using namespace std; int main() { int n; cin>>n; double x[n]; for (int i=0; i<n; i++)//вводим массив cin>>x[i]; double p=1; for (int i=0; i<n-2; i++)//подсчитываем необходимое произведение { p*=(x[i]+2*x[i+1]+x[i+2]); } cout<<p; return 0; } |
Код на Java
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 |
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; n=in.nextInt(); double[] x= new double[n]; for (int i=0; i<n; i++)//вводим массив x[i]=in.nextInt(); double p=1; for (int i=0; i<n-2; i++){ //подсчитываем необходимое произведение p*=(x[i]+2*x[i+1]+x[i+2]); } System.out.print(p); } } |
Решение:
Для нахождения данного произведения воспользуемся массивом. Поскольку в условии указывается нумерация с единицы, то описывая и в дальнейшем обращаясь к массиву, учтем что индекс элемента равен номеру минус единица. В условии продолжения цикла номер не должен превышать n-2, чтобы при подсчете мы не вышли за границу массива.
С работой программы на С++ можно ознакомиться здесь, а на Java здесь.
Зачтено, но…
— Вы неправильно набрали условие задачи. Исправьте, пожалуйста формулу.
— Зачем начинать цикл с 1 вместо 0 и вводить в (i-1)-й элемент? Т.е. всё работает правильно, только зачем?
— «По скольку» пишется слитно в данном случае.
В задаче А156а такое условие.
«Такое условие», это Вы про нумерацию с единицы?
Тогда Вы не правы. В программе нужно хранить данные в массиве по законам массивов, а не по законам задачи. Представьте, что Вам дана численность населения Земли за последние 5 лет. Вы будете хранить эти значения в x[2010], x[2011], x[2012], x[2013], x[2014]? И большая часть массива будет пустовать? Так не поступают. Делают пересчёт индексов массива. Есть другие структуры данных, где пересчёт не нужен, например, ассоциативные массивы, но мы их ещё не учили.
«Такое условие»-это про ваше замечание о неправильно набранном условии задачи. Условие переписано верно.
Видимо я не рассмотрел.
Всё еще осталось замечание-вопрос про оба Ваши цикла: for (int i=1; i <= n; i++) cin >> x[i-1];
К счастью мне попалось видео снятое компанией Samsung, которое полностью пояснило идею. 🙂
Исправила. В цикле i начинается с 0.
Рад, что смог убедить.
Зачтено