Как найти частное число в массиве

888224

1 / 1 / 0

Регистрация: 27.10.2020

Сообщений: 100

1

Как найти частное элементов массива?

08.06.2021, 12:31. Показов 2171. Ответов 5

Метки с++ (Все метки)


Студворк — интернет-сервис помощи студентам

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
system("cls");
    cout << "Введите кол-во чисел,которые хотите поделить: ";
    cin >> n;
    double* a = new double[n];
    for (int i = 0; i < n; i++) {
        cout << "Введите число  " << "(" << i + 1 << "): ";
        cin >> a[i];
    }
    for (int i = 0; i < n; i++) {
        cout << a[i] << " ";
    }
    cout << "nЧастное чисел,введённых вами равно: "<<"| ";
 for (int i = 0; i < n; i++)
 {
     
 }

вводится кол-во чисел
Например, кол-во чисел = 2
3
2
частное 3/2=1.5
немного не пойму как сделать чтобы элементы делились между собой



0



Programming

Эксперт

94731 / 64177 / 26122

Регистрация: 12.04.2006

Сообщений: 116,782

08.06.2021, 12:31

Ответы с готовыми решениями:

Найти произведение четных элементов массива и частное положительных нечетных элементов массива
Найти произведение четных элементов массива и частное положительных нечетных элементов массива….

Найти частное нечетных ,отрицательных элементов массива
Найти часное нечетных ,отрицательных элементов массива
вот у меня есть задачка)!…..
Код:

Найти частное нечётных отрицательных элементов массива
Найти частное нечётных отрицательных элементов массива
Помогите) Очень надо

Найти частное максимального и минимального элементов массива
Дан массив состоящий из элементов 6,8,10,7,11,27,12,3,5,4. Найти частное максимального и…

5

zss

Модератор

Эксперт С++

13085 / 10362 / 6201

Регистрация: 18.12.2011

Сообщений: 27,707

08.06.2021, 12:47

2

Лучший ответ Сообщение было отмечено 888224 как решение

Решение

Поскольку не указано, что на что делить, то право выбора остается за программистом.
Предлагаю вариант “частное от деления соседних элементов массива”

C++
1
2
3
for (int i = 0; i < n-1; i++) {
        cout << a[i]/a[i+1] << " ";
    }



1



1 / 1 / 0

Регистрация: 27.10.2020

Сообщений: 100

08.06.2021, 13:32

 [ТС]

3

zss,
А как найти частное 3 чисел
Например, 6 3 2
6/3/2=1 ?

Добавлено через 11 минут
zss, ?



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,
в задание сказано сделать частное чисел вводишь n-кол-во чисел
Потом берёте 6 3 2
6/3=2
2/2



0



zss

Модератор

Эксперт С++

13085 / 10362 / 6201

Регистрация: 18.12.2011

Сообщений: 27,707

08.06.2021, 13:48

6

Лучший ответ Сообщение было отмечено 888224 как решение

Решение

Ну, если Вы считаете, что нужно именно это, то, пожалуйста:

C++
1
2
3
4
int res=a[0];
for (int i = 1; i < n; i++) 
    res/=a[i];
cout << res << " ";

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.

  1. Находится середина массива как частное от целочисленного деления количества элементов массива на 2. В данном случае получаем 5.
  2. Сравниваем элемент с пятым индексом с искомым элементом, т.е. сравниваем числа 16 и 8, если индексация идет с нуля. Они не равны друг другу, и 16 больше, чем 8.
  3. Находим середину левой части массива от пятого по индексу элемента. Для этого складываем индекс первого элемента и предыдущий от прежней середины. Если индексация идет с нуля, то получим 0+4 = 4. Далее делим нацело на 2, получаем 2 — это новая середина.
  4. Сравниваем второй по индексу элемент (число 7) и искомый (число 8). Они не равны и 7 меньше, чем 8.
  5. Значит рассматриваем отрезок начиная с третьего индекса до четверного. Его середина (3+4), деленная нацело на 2, равна 3.
  6. Сравниваем третий по индексу элемент с числом 8. Они равны. Значит искомый элемент есть в массиве и находится под третьим индексом.

Теперь рассмотрим ситуацию, когда элемента нет. Допустим требуется найти число 25 в том же массиве.

  1. Первая середина — число 16, что меньше 25-ти.
  2. Вторая середина — (6+10) / 2 = 8. 30 > 25.
  3. Третья середина — (6+7) / 2 = 6 (деление нацело). 19 < 25.
  4. Четвертая середина — (7+7) / 2 = 7. 20 < 25.
  5. Левая граница массива становится больше на 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+1

from 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
иначе
знач := середина
все
кон

Добавить комментарий