888224 1 / 1 / 0 Регистрация: 27.10.2020 Сообщений: 100 |
||||
1 |
||||
Как найти частное элементов массива?08.06.2021, 12:31. Показов 2171. Ответов 5 Метки с++ (Все метки)
вводится кол-во чисел
0 |
Programming Эксперт 94731 / 64177 / 26122 Регистрация: 12.04.2006 Сообщений: 116,782 |
08.06.2021, 12:31 |
Ответы с готовыми решениями: Найти произведение четных элементов массива и частное положительных нечетных элементов массива Найти частное нечетных ,отрицательных элементов массива Найти частное нечётных отрицательных элементов массива Найти частное максимального и минимального элементов массива 5 |
zss Модератор 13085 / 10362 / 6201 Регистрация: 18.12.2011 Сообщений: 27,707 |
||||
08.06.2021, 12:47 |
2 |
|||
Сообщение было отмечено 888224 как решение Решение Поскольку не указано, что на что делить, то право выбора остается за программистом.
1 |
1 / 1 / 0 Регистрация: 27.10.2020 Сообщений: 100 |
|
08.06.2021, 13:32 [ТС] |
3 |
zss, Добавлено через 11 минут
0 |
Модератор 13085 / 10362 / 6201 Регистрация: 18.12.2011 Сообщений: 27,707 |
|
08.06.2021, 13:37 |
4 |
Нет такого понятия.
0 |
1 / 1 / 0 Регистрация: 27.10.2020 Сообщений: 100 |
|
08.06.2021, 13:43 [ТС] |
5 |
zss,
0 |
zss Модератор 13085 / 10362 / 6201 Регистрация: 18.12.2011 Сообщений: 27,707 |
||||
08.06.2021, 13:48 |
6 |
|||
Сообщение было отмечено 888224 как решение РешениеНу, если Вы считаете, что нужно именно это, то, пожалуйста:
p.s. учтите только, что в 90% случаев ответом будет ноль.
1 |
Я бы вначале отсортировал массив чисел по возрастанию.
Зачем для каждого элемента массива проверил бы, а нет ли в массиве числа большего чем данное (для этого сортировал массив, чтобы не перебирать каждый раз все элементы массива – это экономит время), которое делиться на данное, и если такое число есть, то текущее выбрасываем, т. к. оно уже входит в состав большего числа.
(Например в приведенном массиве есть число 3 и есть число 300, 3 можно выкинуть, т.к. 300 делится на 3.)
Зачем оставшиеся числа перемножаем (исключая дубли, если они будут).
(это позволит уменьшить количество чисел и тем самым избежать переполнения типа unsigned long на длинных массивах)
Если такой вариант не сработает, а это возможно (например очень длинный массив), то есть вариант посложнее:
Каждый элемент массива представляем как произведение простых чисел
и все уникальные простые числа складываем в словарь, где ключ – это простое число, а значение – это максимальная степень в которой данное простое число входит в элементы исходного массива.
Например: есть число 100500 = 2*2*3*5*5*5*67, тогда словарь будет такой
{2: 2, 3: 1, 5: 3, 67:1}
После перебора всех элементов исходного массива будем иметь словарь простых чисел и их максимальных степеней.
Для получения результата берем и перемножаем все ключи словаря возведенные в степень значения соответствующего из ключей, это даст наименьшее число, которое делиться на все элементы исходного массива.
Все категории
- Фотография и видеосъемка
- Знания
- Другое
- Гороскопы, магия, гадания
- Общество и политика
- Образование
- Путешествия и туризм
- Искусство и культура
- Города и страны
- Строительство и ремонт
- Работа и карьера
- Спорт
- Стиль и красота
- Юридическая консультация
- Компьютеры и интернет
- Товары и услуги
- Темы для взрослых
- Семья и дом
- Животные и растения
- Еда и кулинария
- Здоровье и медицина
- Авто и мото
- Бизнес и финансы
- Философия, непознанное
- Досуг и развлечения
- Знакомства, любовь, отношения
- Наука и техника
6
1 ответ:
0
0
ОТДЕЛ Задание+;
ПЕР
P: РЯД 12 ИЗ ВЕЩ;
частное: ВЕЩ;
макс, мин: ВЕЩ;
сч: ЦЕЛ;
УКАЗ
макс := P[0]; мин := P[0];
ОТ сч := 1 ДО РАЗМЕР(P) – 1 ВЫП
ЕСЛИ P[сч] > макс ТО
макс := P[сч]
АЕСЛИ P[сч] < мин ТО
мин := P[сч]
КОН
КОН;
частное := макс / мин;
КОН Задание.
Читайте также
1)
Программа на паскале:
var a,p:integer;
begin
write(‘a=’); readln(a);
p:=3*a;
writeln(‘Периметр = ‘,p);
end.
Пример:
a=5
Периметр = 15
2)
Формат команды присваивания на паскале:
<переменная> := <выражение>
Объем памяти дискеты равен 720 килобайт.
Var n, digit, ans : integer;
begin
read(n);
ans := 0;
while (n > 0) do begin
digit := n mod 10;
if ((digit = 1) or (digit = 3) or (digit = 9)) then
ans := ans + 1;
n := n div 10;
end;
writeln(ans);
<span>end.</span>
Килобайт <u> 3 </u>
Байт <u> 2 </u>
Гигабайт <u> 5 </u>
Бит <u> 1 </u>
Мегабайт <u> 4 </u>
На Pascal:
Очень нужна помощь!
Не могу понять как решить данную задачу:
В матрице считая строки с номерами k и h многочленами, найти частное и остаток от деления. Получить массив коэффициентов
Вот примерно такой код у меня вышел:
#include <iostream>
#include <clocale>
#include <cmath>
#include <ctime>
using namespace std;
int main(int argc, char* argv[])
{
setlocale(LC_ALL, "Russian");
int rows = 0;
int cols = 0;
cout << "Введите число строк массива: ";
cin >> rows;
cout << "Введите число столбцов массива: ";
cin >> cols;
srand(time(NULL));
int sposob = 0;
cout << "Выберите ручной - 0 или автоматический (любой другой символ) способ создания элементов массива " << endl;
cin >> sposob;
float arr[100][100] = {};
if (sposob == 0)
{
cout << "Введите " << rows * cols << " элемента/ов массива от -10 до 10 " << endl;
for (int i = 0; i < rows; i++)
{
for (int j = 0; j < cols; j++)
{
cin >> arr[i][j];
}
}
}
else
{
cout << "Автоматический ввод" << endl;
for (int i = 0; i < rows; i++)
{
for (int j = 0; j < cols; j++)
{
arr[i][j] = (rand() % 21) - 10;
}
}
}
cout << "Вывод исходного массива: " << endl;
for (int i = 0; i < rows; i++)
{
for (int j = 0; j < cols; j++)
{
cout << arr[i][j] << "t";
}
cout << endl;
}
int k, h;
cout << "Введите номер первой строки: " << endl;
cin >> k;
cout << "Введите номер второй строки: " << endl;
cin >> h;
float mnogochlen1[100][100] = {};
float mnogochlen2[100][100];
for (int j = 0; j < cols; j++) {
mnogochlen1[0][j] = arr[k - 1][j];
}
for (int j = 0; j < cols; j++) {
mnogochlen2[0][j] = arr[h - 1][j];
}
for (int j = 0; j < cols; j++)
{
cout << mnogochlen1[0][j] << "t";
}
cout << endl;
for (int j = 0; j < cols; j++)
{
cout << mnogochlen2[0][j] << "t";
}
cout << endl;
return 0;
}
Перейти к содержанию
Функция бинарного поиска в массиве
Просмотров 1.7к. Обновлено 15 октября 2021
Пользователь вводит число. Сообщить, есть ли оно в массиве, элементы которого расположены по возрастанию значений, а также, если есть, в каком месте находится. При решении задачи использовать бинарный (двоичный) поиск, который оформить в виде отдельной функции.
Двоичный (бинарный) поиск элемента в массиве применим только к отсортированному массиву. Рассмотрим, как осуществляется бинарный поиск в отсортированном по возрастанию массиве.
Допустим, есть массив чисел [1, 3, 7, 8, 15, 16, 19, 20, 30, 32]. Требуется определить, есть ли в нем элемент со значением 8.
- Находится середина массива как частное от целочисленного деления количества элементов массива на 2. В данном случае получаем 5.
- Сравниваем элемент с пятым индексом с искомым элементом, т.е. сравниваем числа 16 и 8, если индексация идет с нуля. Они не равны друг другу, и 16 больше, чем 8.
- Находим середину левой части массива от пятого по индексу элемента. Для этого складываем индекс первого элемента и предыдущий от прежней середины. Если индексация идет с нуля, то получим 0+4 = 4. Далее делим нацело на 2, получаем 2 — это новая середина.
- Сравниваем второй по индексу элемент (число 7) и искомый (число 8). Они не равны и 7 меньше, чем 8.
- Значит рассматриваем отрезок начиная с третьего индекса до четверного. Его середина (3+4), деленная нацело на 2, равна 3.
- Сравниваем третий по индексу элемент с числом 8. Они равны. Значит искомый элемент есть в массиве и находится под третьим индексом.
Теперь рассмотрим ситуацию, когда элемента нет. Допустим требуется найти число 25 в том же массиве.
- Первая середина — число 16, что меньше 25-ти.
- Вторая середина — (6+10) / 2 = 8. 30 > 25.
- Третья середина — (6+7) / 2 = 6 (деление нацело). 19 < 25.
- Четвертая середина — (7+7) / 2 = 7. 20 < 25.
- Левая граница массива становится больше на 1, чем правая. Это «сигнал» о том, что искомого элемента в массиве нет.
Pascal
const N = 20;
type arr = array[1..N] of integer;
var
a: arr;
i: byte;
p,q,e: integer;function search(var c: arr; elem: integer): byte;
var m,i,j: integer;
begin
m := N div 2;
i := 1;
j := N;
while (c[m] <> elem) and (i <= j) do begin
if elem > c[m] then i := m + 1
else j := m - 1;
m := (i+j) div 2;
end;
if i > j then search := 0
else search := m;
end;begin
randomize;
p := 1;
q := 4;
for i:=1 to N do begin
a[i] := random(q-p)+p;
p := p + 3;
q := q + 3;
write(a[i],' ');
end;
writeln;
write('Число: ');
readln(e);
i := search(a,e);
if i = 0 then
writeln('Такого числа в массиве нет.')
else
writeln('Число ', e, ' находится на ', i, '-м месте.');
end.
1 6 7 11 15 17 19 23 27 28 31 35 38 40 45 48 50 52 56 59
Число: 43
Такого числа в массиве нет.1 5 7 10 14 18 20 23 25 29 33 36 38 41 45 48 51 54 57 58
Число: 25
Число 25 находится на 9-м месте.
Язык Си
#include < stdio.h>
#define N 20
int search(int c[], int elem);
main() {
int a[N], i, p, q, e;
srand(time(NULL));
p = 1;
q = 4;
for (i=0; i< N; i++) {
a[i] = rand() % (q - p) + p;
p += 3;
q += 3;
printf("%d ", a[i]);
}
printf("nЧисло: ");
scanf("%d", &e);
i = search(a,e);
if (i == 0) printf("Такого числа нет.n");
else printf("Находится на %d-м месте.n",i);
}int search(int c[], int elem) {
int m,i,j;
m = N / 2;
i = 0;
j = N-1;
while (c[m] != elem && i <= j) {
if (elem > c[m]) i = m + 1;
else j = m - 1;
m = (i + j) / 2;
}
if (i > j) return 0;
else return m+1;
}
Python
N = 20
def srch(c,e):
m = N // 2
i = 0
j = N-1
while c[m] != e and i <= j:
if e > c[m]:
i = m + 1
else:
j = m - 1
m = (i+j) // 2
if i > j:
return 0
else:
return m+1from random import random
p = 1
q = 4
a = [0]*N
for i in range(N):
a[i] = int(random() * (q-p))+p
p += 3
q += 3
print(a[i],end=' ')
print()
e = int(input('Число: '))
i = srch(a,e)
if i == 0:
print('Такого числа нет.')
else:
print('Число находится на %d-м месте.' % i)
КуМир
цел таб arr[1:20]алг
нач
цел i, a, b, e
a := 1
b := 4
нц для i от 1 до 20
arr[i] := int(rand(a,b))
вывод arr[i], " "
a := a + 3
b := b + 3
кц
вывод нс
цел э, номер
ввод э
номер := бинарный_поиск(э)
если номер <> 0 то
вывод "Элемент найден на ", номер, "-м месте"
иначе
вывод "Элемент не найден"
все
коналг цел бинарный_поиск(цел элемент)
нач
цел начало, конец, середина
конец := 20
середина := div(конец,2)
начало := 1
нц пока arr[середина] <> элемент и начало <= конец
если элемент > arr[середина] то
начало := середина + 1
иначе
конец := середина - 1
все
середина := div(конец+начало,2)
кц
если начало > конец то
знач := 0
иначе
знач := середина
все
кон