Условие
Последовательность состоит из натуральных чисел и завершается числом 0. Определите, сколько элементов этой последовательности больше предыдущего элемента.
Решение
prev = int(input()) answer = 0 while prev != 0: next = int(input()) if next != 0 and prev < next: answer += 1 prev = next print(answer)
Добавить комментарий Отменить ответ
ЕГЭ на соточку для чайников
Прошу прощения, что так долго пропадал. Питошка вернулся, да еще и с группой в вконтакте, подписывайтесь. Помимо этого, на питошке откроется новая рубрика, в которой будут четкие объяснения всех заданий ЕГЭ и ОГЭ по информатике, внимательно прочитав которые, я уверен, вы улучшите свои баллы на экзамене
Python-сообщество
- Начало
- » Python для новичков
- » Задача «Количество элементов, равных максимуму»
#1 Ноя. 5, 2020 08:41:31
Sanya9652 Зарегистрирован: 2020-10-19 Сообщения: 3 Репутация: 0 Профиль Отправить e-mail
Задача «Количество элементов, равных максимуму»
Доброго времени суток
В качестве практики решаю задачки на питонтьютор, и попалась следующая:
Последовательность состоит из натуральных чисел и завершается числом 0. Определите, сколько элементов этой последовательности равны ее наибольшему элементу.
Для решения данной задачи написал код, он работает, но что-то мне подсказывает, что сделал все не через то место, и он должен быть существенно короче, если подскажете, в чем я ошибся, то буду премного благодарен.
n = int(input()) x = 0 #maximum y = 1 #schet while n != 0: if xn: x=n if yn: y=1 #obnulyaet schet elif n == x and not x>n: y+=1 n = int(input()) print(y)
Отредактировано Sanya9652 (Ноя. 5, 2020 08:42:59)
#2 Ноя. 5, 2020 12:25:53
py.user.next От: Зарегистрирован: 2010-04-29 Сообщения: 9639 Репутация: 839 Профиль Отправить e-mail
Задача «Количество элементов, равных максимуму»
Sanya9652
но что-то мне подсказывает, что сделал все не через то место, и он должен быть существенно короче
Он у тебя даже неправильно реализует алгоритм
>>> def f(): . n = int(input()) . x = 0 #maximum . y = 1 #schet . while n != 0: . if xn: . x=n . if yn: . y=1 #obnulyaet schet . elif n == x and not x>n: . y+=1 . n = int(input()) . . print(y) . >>> f() 1 1 1 2 2 0 4 >>>
Должен выдавать 2.
Отредактировано py.user.next (Ноя. 5, 2020 12:26:10)
#3 Ноя. 5, 2020 17:43:35
Rafik Зарегистрирован: 2018-09-04 Сообщения: 231 Репутация: 27 Профиль Отправить e-mail
Задача «Количество элементов, равных максимуму»
А слабо, собрать входные данные в список, отсортировать его реверсивно и, в цикле, посчитать сколько элементов равны певому элементу списка?
#4 Ноя. 5, 2020 23:33:41
py.user.next От: Зарегистрирован: 2010-04-29 Сообщения: 9639 Репутация: 839 Профиль Отправить e-mail
Задача «Количество элементов, равных максимуму»
Rafik
А слабо, собрать входные данные в список, отсортировать его реверсивно и, в цикле, посчитать сколько элементов равны певому элементу списка?
Сделай, конечно, так, чтобы чисто лучше питон узнать. Но это алгоритмически неправильно. Во-первых, данные нужно стараться обрабатывать так, будто они поступают бесконечно (это могут быть датчики, огромные массивы данных и тому подобное), поэтому нужно стараться не собирать данные никуда, а обрабатывать их на лету, иначе не хватит памяти и время выполнения будет удлинняться. Во-вторых, ты предложил отсортировать все данные, хотя в них может быть, например, миллиард единиц и двоек и одно число сто. Зачем сортировать этот миллиард элементов? Достаточно число сто получить через линейную функцию max(), а потом считать его количество такой же линейной функцией. При этом миллиард единиц и двоек остаются нетронутыми на своих местах и, соответственно, на них не тратится время на сравнения и перемещения.
У него же алгоритм верный - обработка идёт на лету, - но он его не смог точно реализовать и написал код с ошибкой. Единственное что, он не должен читать из входного потока, а должен брать элементы из итератора, а итератор уже прикрепляется к входному потоку ввода. Так итератор можно прикреплять не только к входному потоку ввода, но и к сетевому сокету, к файлу, к любому генератору данных.
Отредактировано py.user.next (Ноя. 5, 2020 23:35:03)
Решение задач на С++
Задача B. Количество нулей
Дано натуральное число N. Напишите функцию int NumberOfZeroes(int n), определяющую количество нулей среди всех цифр числа N.
- int NumberOfZeroes( int n)
- int count = 0;
- while (n)
- if (n % 10 == 0)
- count++;
- n /= 10;
- >
- return count;
- >
Задача C. Минимальная и максимальная цифры
Дано натуральное число N. Напишите функцию int MinDigit (int n) и int MaxDigit (int n), определяющие наименьшую и наибольшую цифры данного числа.
Необходимо вывести наименьшую и наибольшую цифры данного числа через пробел.
- int MinDigit ( int n)
- int cur;
- int min_n = 9;
- while (n)
- cur = n % 10;
- min_n = min(min_n,cur);
- n /= 10;
- >
- return min_n;
- >
- int MaxDigit ( int n)
- int cur;
- int max_n = 0;
- while (n)
- cur = n % 10;
- max_n = max(max_n,cur);
- n /= 10;
- >
- return max_n;
- >
Задача D. Двоичная запись
Дано натуральное число N. Выведите его представление в двоичном виде в обратном порядке.
- int n;
- cin >> n;
- while (n)
- cout
- n >>= 1;
- >
- cout
Задача E. Обращение числа
Напишите функцию int reverse(int n), которая переставляет цифры числа в обратном порядке .
Вариант 1. Если перевернутое число не требуется оформлять как отдельную переменную, то можно, просто откусывая последние цифры исходного числа, выписывать их в строку вывода .
- int reverse( int n)
- do
- cout
- n /= 10;
- >
- while (n);
- return 0;
- >
Вариант 2. Но можно и завести отдельную переменную под перевертыш, тогда появится возможность при необходимости использовать результат в дальнейшем.
- int reverse( int n)
- int rev = 0;
- do
- rev = rev * 10 + n % 10;
- n /= 10;
- >
- while (n);
- return rev;
- >
Задача F. Количество палиндромов
Назовем число палиндромом, если оно не меняется при перестановке его цифр в обратном порядке. Напишите функцию bool IsPalindrome (int n), проверяющую по данному числу n, является ли оно палиндромом.
Напишите программу, которая по заданному числу K выводит количество натуральных палиндромов, не превосходящих K.
- bool IsPalindrome ( int cur)
- int base = cur;
- int rev = 0;
- while (cur)
- rev = rev * 10 + cur % 10;
- cur /= 10;
- >
- if ( base == rev)
- return true ;
- else
- return false ;
- >
- int main()
- freopen( "input.txt" , "r" ,stdin);
- freopen( "output.txt" , "w" ,stdout);
- int n;
- cin >> n;
- int cur = 1, count = 0;
- while (cur
- if (IsPalindrome (cur))
- count++;
- cur++;
- >
- cout
Операторы цикла
Цикл While. Блок 2. Обработка последовательностей, индуктивные функции.
Задача A. Длина последовательности
Программа получает на вход последовательность целых неотрицательных чисел, каждое число записано в отдельной строке. Последовательность завершается числом 0, при считывании которого программа должна закончить свою работу и вывести количество членов последовательности (не считая завершающего числа 0).
Числа, следующие за числом 0, считывать не нужно.
- int x, length = -1;
- do
- length++;
- cin>>x;
- >
- while (x);
- cout
Задача B. Сумма последовательности
Определите сумму всех элементов последовательности, завершающейся числом 0.
Числа, следующие за нулем, считывать не нужно.
- int x, sum = 0;
- cin >> x;
- while (x)
- sum += x;
- cin >> x;
- >
- cout
Задача C. Среднее значение последовательности
Определите среднее значение всех элементов последовательности, завершающейся числом 0.
Числа, следующие за нулем, считывать не нужно.
- int x, sum = 0, length = 0;
- while (cin>>x && x)
- sum += x;
- length++;
- >
- double rms = ( double )sum / length;
- printf( "%0.15f" ,rms);
Задача D. Количество четных элементов последовательности
Определите количество четных элементов в последовательности, завершающейся числом 0.
Само число 0, и все, что следует за ним, учитывать не нужно.
- int x, count = 0;
- cin >> x;
- while (x)
- if (!(x & 1))
- count++;
- cin >> x;
- >
- cout
Задача E. Максимум последовательности
Последовательность состоит из натуральных чисел и завершается числом 0. Определите значение наибольшего элемента последовательности.
Числа, следующие за нулем, считывать не нужно.
- int x;
- cin >> x;
- int Max = x;
- while (x)
- Max = max(Max,x);
- cin >> x;
- >
- cout
Задача F. Количество элементов, которые больше предыдущего
Последовательность состоит из натуральных чисел и завершается числом 0. Определите, сколько элементов этой последовательности больше предыдущего элемента.
Числа, следующие за числом 0, считывать не нужно.
- int prv, cur;
- cin >> cur;
- int count = 0;
- while (cur)
- prv = cur;
- cin >> cur;
- if (cur > prv)
- count++;
- >
- cout
Задача G. Второй максимум
Последовательность состоит из различных натуральных чисел и завершается числом 0. Определите значение второго по величине элемента в этой последовательности.
Числа, следующие за числом 0, считывать не нужно.
- int x;
- cin >> x;
- int max1 = x, max2 = -1;
- while (x)
- cin >> x;
- if (x > max1)
- max2 = max1;
- max1 = x;
- >
- else if ( x > max2 )
- max2 = x;
- >
- cout
Задача H. Второй максимум – 2
Последовательность состоит из натуральных чисел и завершается числом 0. Определите значение второго по величине элемента в этой последовательности, то есть элемента, который будет наибольшим, если из последовательности удалить наибольший элемент.
Числа, следующие за числом 0, считывать не нужно.
- int x;
- cin >> x;
- int max1 = x, max2 = -1;
- while (x)
- cin >> x;
- if (x > max1)
- max2 = max1;
- max1 = x;
- >
- else if ( x > max2 )
- max2 = x;
- >
- cout
Задача I. Количество элементов, равных максимуму
Последовательность состоит из натуральных чисел и завершается числом 0. Определите, какое количество элементов этой последовательности, равны ее наибольшему элементу.
Числа, следующие за числом 0, считывать не нужно.
- int x, count = 0;
- cin >> x;
- int max = x;
- while (x)
- if (x > max)
- max = x;
- count = 1;
- >
- else
- if (x == max)
- count++;
- cin >> x;
- >
- cout
Задача J. Сумма последовательности – 2
Найдите сумму последовательности натуральных чисел, если признаком окончания конца последовательности является два подряд идущих числа 0.
Числа, следующие после двух подряд идущих нулей считывать не нужно.
- int x;
- cin >> x;
- int sum = 0;
- if (x == 0)
- cin >> x;
- while (x)
- sum += x;
- cin >> x;
- if (x == 0)
- cin >> x;
- >
- cout
Задача K. Максимальное число идущих подряд равных элементов
Дана последовательность натуральных чисел, завершающаяся числом 0. Определите, какое наибольшее число подряд идущих элементов этой последовательности равны друг другу.
Числа, следующие за числом 0, считывать не нужно.
- int cur;
- cin >> cur;
- int base = cur, count = 0, count_max = 0;
- while (cur)
- if ( base == cur)
- count++;
- else
- base = cur;
- count = 1;
- >
- count_max = max(count_max, count);
- cin >> cur;
- >
- cout
Задача L. Максимальная длина монотонного фрагмента
Дана последовательность натуральных чисел, завершающаяся число 0. Определите наибольшую длину монотонного фрагмента последовательности (то есть такого фрагмента, где все элементы либо больше предыдущего, либо меньше).
Числа, следующие за числом 0, считывать не нужно.
- int prv, cur;
- cin >> prv;
- if (prv)
- cin >> cur;
- int count = 1, count_max = 1;
- int sgn_prv = cur - prv, sgn_cur;
- while (cur)
- sgn_cur = cur - prv;
- if (sgn_prv * sgn_cur > 0)
- count++;
- else
- if (sgn_prv * sgn_cur == 0)
- count = 1;
- else
- count = 2;
- count_max = max(count_max, count);
- sgn_prv = sgn_cur;
- prv = cur;
- cin >> cur;
- >
- cout
- >
- else
- cout
Задача M. Количество локальных максимумов
Элемент последовательности называется локальным максимумом, если он строго больше предыдущего и последующего элемента последовательности. Первый и последний элемент последовательности не являются локальными максимумами.
Дана последовательность натуральных чисел, завершающаяся числом 0. Определите количество строгих локальных максимумов в этой последовательности.
Числа, следующие за числом 0, считывать не нужно.
- int prv, cur, nxt;
- int count = 0;
- if (cin>>prv && prv)
- if (cin >> cur && cur)
- if (cin >> nxt)
- while (nxt)
- if ((prv < cur) && (cur >nxt))
- count++;
- prv = cur;
- cur = nxt;
- cin >> nxt;
- >
- >
- >
- >
- cout
Задача N. Наименьшее расстояние между локальными максимумами
Определите наименьшее расстояние между двумя локальными максимумами последовательности натуральных чисел, завершающейся числом 0. Если в последовательности нет двух локальных максимумов, выведите число 0.
- int prv, cur, nxt, pos = 0, prv_max = 0, min_len = 0, cur_len;
- int count = 0;
- if (cin>>prv && prv)
- if (cin >> cur && cur)
- if (cin >> nxt)
- pos = 2;
- while (nxt)
- if ((prv < cur) && (cur >nxt))
- if (prv_max != 0 )
- cur_len = pos - prv_max;
- if (min_len == 0)
- min_len = cur_len;
- else
- min_len = min(min_len,cur_len);
- >
- prv_max = pos;
- >
- prv = cur;
- cur = nxt;
- cin >> nxt;
- pos++;
- >
- >
- >
- >
- cout
Дана последовательность натуральных чисел x1, x2, . xn. Стандартным отклонением называется величина
где —среднее арифметическое последовательности.
Определите среднеквадратичное отклонение для данной последовательности натуральных чисел, завершающейся числом 0.
- int x;
- cin >> x;
- int sum_x = 0, sum_x2 = 0, n = 0;
- double s, res;
- if (x)
- while (x)
- sum_x += x;
- sum_x2 += x*x;
- n++;
- cin >> x;
- >
- s = ( double )sum_x / n;
- if (n != 1)
- res = sqrt((sum_x2 - 2 * s * sum_x + n * s * s) / (n - 1));
- printf( "%0.11f" , res);
- >
- else
- cout
- >
Операторы цикла
Цикл While. Блок 1. Задачи на цикл While.
Задача A. Список квадратов
Выведите все точные квадраты натуральных чисел, не превосходящие данного числа N.
- int n;
- cin>>n;
- int value = 1;
- int curSqr = value * value ;
- while (curSqr <=n)
- cout
- value ++;
- curSqr = value * value ;
- >
Задача B. Минимальный делитель
Дано целое число, не меньшее 2. Выведите его наименьший натуральный делитель, отличный от 1.
- int n;
- cin >> n;
- int i = 2, min_den = 1;
- int sqrt_n = sqrt(( double )n);
- while (i
- if (n % i == 0)
- min_den = i;
- break ;
- >
- i++;
- >
- if (min_den == 1)
- cout
- else
- cout
Задача C. Список степеней двойки
По данному числу N распечатайте все целые степени двойки, не превосходящие N, в порядке возрастания. Операцией возведения в степень пользоваться нельзя!
- int n;
- cin >> n;
- int pow2 = 1;
- while (pow2
- cout
- pow2 *=2;
- >
Той же самой цели можно добиться, заменив явное умножение на 2 побитовым сдвигом.
Вариант 2.
- int n;
- cin >> n;
- int pow2 = 1;
- while (pow2
- cout
- pow2
- >
Задача D. Точная степень двойки
Дано натуральное число N. Выведите слово YES, если число N является точной степенью двойки, или слово NO в противном случае. Операцией возведения в степень пользоваться нельзя!
- int n;
- cin>>n;
- int bitAmount = 0;
- while (n)
- bitAmount += n % 2;
- n /= 2;
- >
- if (bitAmount == 1)
- cout
- else
- cout
Задача E. Двоичный логарифм
По данному натуральному числу N выведите такое наименьшее целое число k, что 2 k ≥N.
Операцией возведения в степень пользоваться нельзя!
- int n;
- cin >> n;
- int pow2 = 1, k = 0;
- while (pow2 < n)
- pow2
- k++;
- >
- cout
Задача F. Утренняя пробежка
В первый день спортсмен пробежал x километров, а затем он каждый день увеличивал пробег на 10% от предыдущего значения. По данному числу y определите номер дня, на который пробег спортсмена составит не менее y километров.
Программа получает на вход действительные числа x и y и должна вывести одно натуральное число.
- double x, y;
- cin >> x >> y;
- int k = 1;
- while (x < y)
- x *= 1.1;
- k++;
- >
- cout
Задача G. Банковские проценты
Вклад в банке составляет x рублей. Ежегодно он увеличивается на p процентов, после чего дробная часть копеек отбрасывается. Каждый год сумма вклада становится больше. Определите, через сколько лет вклад составит не менее y рублей.
Программа получает на вход три натуральных числа: x, p, y и должна вывести одно целое число.
- double x,p,y;
- int years = 0;
- cin>>x>>p>>y;
- while (x
- x *= (1 + p/100.0);
- x *= 100;
- x = ( int ) x;
- x /= 100;
- years++;
- >
- cout
- int n, i = 2, f1 = 0, f2 = 1, cur;
- cin >> n;
- while (i
- cur = f1 + f2;
- f1 = f2;
- f2 = cur;
- i++;
- >
- if (n <=1)
- cout
- else
- cout
Задача I. Номер числа Фибоначчи
Дано натуральное число A. Определите, каким по счету числом Фибоначчи оно является, то есть выведите такое число n, что φn=A. Если А не является числом Фибоначчи, выведите число -1.
- int a, i = 1, f1 = 0, f2 = 1, cur = 1;
- cin >> a;
- while (cur < a)
- cur = f1 + f2;
- f1 = f2;
- f2 = cur;
- i++;
- >
- if (cur == a)
- cout
- else
- cout
Задача J. Исполнитель Раздвоитель
Исполнитель “Раздвоитель” преобразует натуральные числа. У него есть две команды: “Вычесть 1” и “Разделить на 2”, первая команда уменьшает число на 1, вторая команда уменьшает число в два раза, если оно чётное, иначе происходит ошибка.
Дано два натуральных числа A и B (A>B). Напишите алгоритм для Раздвоителя, который преобразует число A в число B и при этом содержит минимальное число команд. Команды алгоритма нужно выводить по одной в строке, первая команда обозначается, как -1, вторая команда как :2.
- int a, b;
- cin >> a >> b;
- while (a > b)
- if (a % 2 == 0 && a / 2 >= b)
- cout
- a /= 2;
- >
- else
- cout
- a--;
- >
- >
Задача K. Исполнитель Водолей
У исполнителя “Водолей” есть два сосуда, первый объемом A литров, второй объемом B литров, а также кран с водой. Водолей может выполнять следующие операции:
Наполнить сосуд A (обозначается >A).
Наполнить сосуд B (обозначается >B).
Вылить воду из сосуда A (обозначается A>).
Вылить воду из сосуда B (обозначается B>).
Перелить воду из сосуда A в сосуд B (обозначается как A>B).
Перелить воду из сосуда B в сосуд A (обозначается как B>A).
Команда переливания из одного сосуда в другой приводят к тому, что либо первый сосуд полностью опустошается, либо второй сосуд полностью наполняется.
Программа получает на вход три натуральных числа A, B, N, не превосходящих 10 4 Вам необходимо вывести алгоритм действий Водолея, который позволяет получить в точности N литров в одном из сосудов, если же такого алгоритма не существует, то программа должна вывести текст Impossible. Количество операций в алгоритме не должно превышать 10 5 . Гарантируется, что если задача имеет решение, то есть решение, которое содержит не более, чем 10 5 операций.
- const int LIMIT = 1e5 + 10;
- int a, b, n;
- cin >> a >> b >> n;
- char min = 'A' , max = 'B' ;
- bool real = false ;
- if (b < a)
- swap(a, b);
- swap(min, max);
- >
- int bV = 0, aV = 0;
- int k = 0;
- do
- k++; /*printf(">%c\n",min);*/
- k++; /*printf("%c>%c\n", min, max);*/
- if (b - bV >= a)
- bV += a;
- else
- bV = a - (b - bV);
- k++; /*printf("%c>\n",max);*/
- k++; /*printf("%c>%c\n", min, max);*/
- >
- if (n == bV)
- real = true ;
- break ;
- >
- >
- while (k
- if (real)
- bV = 0;
- do
- printf( ">%c\n" ,min);
- printf( "%c>%c\n" , min, max);
- if (b - bV >= a)
- bV += a;
- else
- bV = a - (b - bV);
- printf( "%c>\n" ,max);
- printf( "%c>%c\n" , min, max);
- >
- if (n == bV)
- break ;
- >
- while ( true );
- >
- else
- cout
Сколько элементов этой последовательности больше предыдущего элемента
Всем привет, подскажите пожалуйста, как решить задачу. а то не выходит.
Не могу придумать алгоритм проверки. Условие такое:
Последовательность состоит из натуральных чисел и завершается числом 0. Определите, сколько элементов этой последовательности больше предыдущего элемента.
1 2 3 4 5 6
sum = [] flag=0 element = int(input()) while element != 0: sum.append(element) element = int(input())
Начало есть. А вот как сам алгоритм не знаю. Выходит что мне надо проверить сколько элементов больше предыдущего. А потом сохранить результат. и проверить следующие варианты и вывести лучший.
Лучшие ответы ( 1 )
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
Ответы с готовыми решениями:
Определите, сколько элементов этой последовательности больше предыдущего элемента.
Последовательность состоит из натуральных чисел и завершается числом 0. Определите, сколько.
Цикл while: Определить, сколько элементов этой последовательности больше предыдущего элемента
1)Последовательность состоит из натуральных чисел и завершается числом 0. Определите, сколько.
Определите, сколько элементов этой последовательности меньше предыдущего элемента, но больше следующего
Добрый день, формучане. Необходима помощь с написанием программы, которая бы находила количество.
Определить, сколько элементов последовательности больше предыдущего элемента
Задание №1: Последовательность состоит из натуральных чисел и завершается числом 0. Определите.
Do-while: определить, сколько элементов в последовательности больше предыдущего элемента
Дана последовательность целых чисел, оканчивающаяся нулём. Определите, сколько элементов этой.
4460 / 3213 / 1125
Регистрация: 21.03.2016
Сообщений: 7,950
Сообщение было отмечено Pushek как решение
Решение
не айс называть переменные служебным словом sum = []. а если внимательно прочитать вопрос Определите, сколько элементов этой последовательности больше предыдущего элемента.
то ключевое слово ПРЕДЫДУЩЕГО то есть одного а не всех из списка. поэтому идем по списку сравниваем и считаем
1 2 3 4 5
result = 0 for i in range(len(sum)-1): if sum[i] sum[i+1]: result += 1 print(result)