Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.63/8: Рейтинг темы: голосов - 8, средняя оценка - 4.63
Быдлокодер
 Аватар для Darky
512 / 298 / 85
Регистрация: 22.11.2009
Сообщений: 892

Два задания по одномерным массивам.

29.11.2009, 07:19. Показов 1971. Ответов 9
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
1.
Дан вещественный массив А[N]. Определить количество и индексы тех элементов массива, которые меньше элементов, стоящих в соседних позициях справа и слева, но больше минимального элемента массива.

2.
Дан целочисленный массив А[N]. Найти элемент массива с максималь-ной суммой делителей. Вывести на экран значение найденного элемента и его порядковый номер в массиве.


Лучше всего описать алгоритм. Надеюсь на Вашу помощь.
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
29.11.2009, 07:19
Ответы с готовыми решениями:

Задания по одномерным массивам.
Прошу помочь.. 1. Дана последовательность целых чисел a1,a2, ..., an. Выяснить, какое число встречается раньше - положительное или...

задача по одномерным массивам
1) Условие задачи: В массиве A определить среднюю длину непрерывных участков отрицательных значений элементов 2) Если у...

Вопрос по одномерным массивам.
Всем доброго времени суток. 1. Написал код но при запуске выкидывает ошибку и условия не считает. В одномерном массиве формируемом...

9
Эксперт С++
 Аватар для valeriikozlov
4728 / 2549 / 757
Регистрация: 18.08.2009
Сообщений: 4,568
29.11.2009, 08:40
Я тоже верю, что Вам хватит одного алгоритма.
Цитата Сообщение от Darky Посмотреть сообщение
1.
Дан вещественный массив А[N]. Определить количество и индексы тех элементов массива, которые меньше элементов, стоящих в соседних позициях справа и слева, но больше минимального элемента массива.
Если не использовать доп. массивы, то однозначно здесь два прохода: в первом ищем минимальный элемент (заносим его в переменную min). Во втором проходе ищем элементы (A[i-1]>A[i] && A[i]<A[i+1] && A[i]>min). Если такие находим, то выводим на экран i, и еще count++ (счетчик элементов подходящих под условие). В конце выводим на экран count. Второй проход ограничен так for(i=1; i<N-1; i++), что бы не выйти за границы массива.

Добавлено через 20 минут
Цитата Сообщение от Darky Посмотреть сообщение
2.
Дан целочисленный массив А[N]. Найти элемент массива с максималь-ной суммой делителей. Вывести на экран значение найденного элемента и его порядковый номер в массиве.
Вторая будет по объемней насчет кода, но решается за один проход. Завести придется переменные (это не все переменные,которые придется заводить, я здесь выделяю только те, котрые необходимы для сравнения суммы делителей) sum (для хранения максимального суммы делителей) и sum_temp (для подсчета суммы делителей текущего элемента), i_sum (для хранения индекса элемента с максимальной суммой делителей). При проходе массива действуем так. Берем очередной элемент массива A[i]. Затем запускаем подпрограмму подсчета суммы делителей (можно ее оформить и отдельной функцией по желанию). Она выглядит так: for(j=2; j<A[i]/2; j++) - т.е. мы перебираем все числа в диапазоне от 2 до A[i]/2, Проверяем каждое число на делимость без остатка, если делится, то sum_temp увеличиваем на это число, само число A[i] делим тоже на этот делитель. Вообще-то A[i] изменять нельзя (оно нам еще пригодится в конце, для вывода на экран), поэтому перед проверкой на делимость, нужно завести еще одну переменную temp=A[i];, а потом уже проверять temp. Итак temp тоже делим на этот делитель. Затем прверяем снова делимость без остатка уменьшенного temp на этот же делитель, и т.д. пока будет деоится без остатка. Затем берем следующий делитель. Продолжаем вычисление делителей пока temp>1. Затем сравниваем полученное sum_temp с sum. Если sum_temp>sum, то sum_temp=sum и i_sum=i. Вроде основная часть все.
Если честно, то проще код было написать, чем алгоритм. Надеюсь, что описал все понятно. Если что не поняли, спрашивайте.
1
║XLR8║
 Аватар для outoftime
1212 / 909 / 270
Регистрация: 25.07.2009
Сообщений: 4,360
Записей в блоге: 5
29.11.2009, 08:45
Цитата Сообщение от Darky Посмотреть сообщение
2.
Дан целочисленный массив А[N]. Найти элемент массива с максималь-ной суммой делителей. Вывести на экран значение найденного элемента и его порядковый номер в массиве.
я б использовал доп масив, в который пихал бы количество делителей, для нахождения это количества есть функция GCD (перевод НОД на аглицкий) пишется она
так
C++
1
int gcd(int a, int b){ return (a) ? (gcd(b%a,a)) : (b);}
, выдает НОД пары чисел, все что остается пройтись циклом до корня и подсчитать количества таких пар. Да, и нужно учитывать, что НОД должен быть строго больше 1.

Если нужно за один проход, тогда сначала максимальная сума общих делителей с самого начала = -1, а потом при подсчете для каждого элемента смотрим что больше условным тернальным оператором или встроеной функцией max(), хотя 1-е - предпочтительней..

Просьба к автору уточнить условие по поводу 2-ой задачи: искать числа, на которые будет делится элемент масива нужно из самого масива, или среди его делителей?
0
Быдлокодер
 Аватар для Darky
512 / 298 / 85
Регистрация: 22.11.2009
Сообщений: 892
29.11.2009, 10:26  [ТС]
outoftime, Лично я так понял задание, что искать числа нужно впринципе среди его делителей.

valeriikozlov, Спасибо, я сейчас потыкаюсь, если что будет непонятно, напишу.

Добавлено через 17 минут
Вот например первое задание.
Не мог додуматься как вычислить минимальный элемент массива, а гуглить такую слабую вещь - мозги разжижать.
Вот до чего додумался:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
#include <iostream>
#define n 14
void main()
{
int min=32767,A[n],kol=0,i;
  for (i=1; i<n-1; i++)
    {
      cin>>A[i];
        if (min>A[i])
            min=A[i];
          if (A[i-1]>A[i] && A[i]<A[i+1] && A[i]>min)
            {
              kol++;
              cout<<"Index elementa: "<<i<<endl;
            }
    }
    cout<<"Kol-vo ravno: "<<kol;
}
Работает все правильно, но алгоритм подсчета минимального элемента мне кажется несколько неуместным.
(К слову, 32767 - потолок для signed int)

Добавлено через 18 минут
А со вторым совладать не могу.. Покажите код, пожалуйста - я разберусь.
0
Эксперт С++
 Аватар для valeriikozlov
4728 / 2549 / 757
Регистрация: 18.08.2009
Сообщений: 4,568
29.11.2009, 10:38
Darky, Первое задание провалено (ничего страшного, мы найдем все равно золотую середину). Я же писал, что за два прохода. А Вы решили за один. Смотрите, вы в единственном проходе ищете минимум (я бы начальное значение min присвоил бы не32767, а значение нулевого элемента массива).
За один проход получается так: где-то в середине у Вас минимум такой-то, проверяемый элемент с боков окружен большими элементами, сам этот элемент меньше минимума, поэтому Вы этот элемент пропускаете. Но минимум может ведь уменьшится дальше, мы же об этом не знаем, и вполне возможно прпущенный элемент зря пропущен. Вот поэтому, первый проход просто поиск минимума (i=0; i<N; i++), а второй проход это как раз вычисление нужных нам элементов.
Со второй задачей сейчас помогу
0
║XLR8║
 Аватар для outoftime
1212 / 909 / 270
Регистрация: 25.07.2009
Сообщений: 4,360
Записей в блоге: 5
29.11.2009, 10:51
C++
1
int min = -(1<<31-1)-1;
это абсолютный минимум для инта
0
Быдлокодер
 Аватар для Darky
512 / 298 / 85
Регистрация: 22.11.2009
Сообщений: 892
29.11.2009, 10:54  [ТС]
valeriikozlov, Вот такая программа
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
#include <iostream>
#define n 14
void main()
{
int min,A[n],kol=0,i,j;
 for (j=0; j<n; j++)
 {
      cin>>A[j];
      min=A[0];
        if (min>A[j])
            min=A[j];
    for (i=1; i<n-1; i++)
    {
          if (A[j-1]>A[j] && A[j]<A[j+1] && A[j]>min)
            {
              kol++;
              cout<<"Index elementa: "<<j<<endl;
            }
    }
  }
    cout<<"Kol-vo ravno: "<<kol;
}
Вроде бы подходит, но индекс элемента выдает много-много раз. Почему? Где ошибка?
0
Эксперт С++
 Аватар для valeriikozlov
4728 / 2549 / 757
Регистрация: 18.08.2009
Сообщений: 4,568
29.11.2009, 11:02
2-ая:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
#include <iostream>
#define n 14
int main()
{
int A[n],i, j, sum=0, sum_temp, i_sum, temp;
  for (i=0; i<n; i++)
    cin>>A[i];
  for(i=0; i<n; i++)
  {
      sum_temp=0;
      temp=A[i];
      for(j=2; j<=temp && temp>1; j++)
          if(temp%j==0)
          {
              temp/=j;
              sum_temp+=j;
              j--;
          }
        if(sum<sum_temp)
        {
            sum=sum_temp;
            i_sum=i;
        }
    }
    cout<<"Element s max summoi delitelei: "<<A[i_sum]<<endl;
    cout<<"Ego porydkovy nomer: "<<i_sum<<endl;
    return 0;
}
Добавлено через 6 минут
1-ая:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
#include <iostream>
#define n 14
void main()
{
int min,A[n],kol=0,j;
cin>>A[0];
min=A[0];
 for (j=1; j<n; j++)
 {
      cin>>A[j];
      if (min>A[j])
            min=A[j];
 }
  for (j=1; j<n-1; j++)
    {
          if (A[j-1]>A[j] && A[j]<A[j+1] && A[j]>min)
            {
              kol++;
              cout<<"Index elementa: "<<j<<endl;
            }
    }  
    cout<<"Kol-vo ravno: "<<kol<<endl;
}
1
Быдлокодер
 Аватар для Darky
512 / 298 / 85
Регистрация: 22.11.2009
Сообщений: 892
29.11.2009, 11:09  [ТС]
valeriikozlov, Спасибо! Сейчас буду копать, где ошибся в первой задаче - уже понял.
0
22.12.2010, 11:34  [ТС]

Не по теме:

и это писал я? боже, за год столько поменялось

0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
22.12.2010, 11:34
Помогаю со студенческими работами здесь

Задача по одномерным массивам
Сформировать одномерный массив целых чисел а, используя датчик случайных чисел. Удалить 5 последних элементов массива. Прибавить в начало...

Задача по одномерным массивам
Помогите плиз решить задачу по одномерным массивам в C++ &quot;Дан массив целых чисел из n элементов. Найти удвоенную сумму положительных...

Этап в задаче по одномерным массивам
void zeroElementsDelete(int *array, size_t *arraySize) { size_t zeroCounter(0); for (size_t i=0; i &lt; *arraySize; i++) ...

лаба по одномерным и многомерным массивам
Нужно сделать вот такую лабораторную, буду рад любой написанной функции, заранее спасибо. 1) N = 45 2) Функция для получения элементов...

решите программы по одномерным массивам на языке С++
1.Массив заполнить с помощью генератора случайных чисел в интервале в количестве 15 элементов. Сформировать массив Р из элементов массива...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
10
Ответ Создать тему
Новые блоги и статьи
Кто-нибудь знает, где можно бесплатно получить настольный компьютер или ноутбук? США.
Programma_Boinc 26.12.2025
Нашел на реддите интересную статью под названием Anyone know where to get a free Desktop or Laptop? Ниже её машинный перевод. После долгих разбирательств я наконец-то вернула себе. . .
Thinkpad X220 Tablet — это лучший бюджетный ноутбук для учёбы, точка.
Programma_Boinc 23.12.2025
Рецензия / Мнение/ Перевод Нашел на реддите интересную статью под названием The Thinkpad X220 Tablet is the best budget school laptop period . Ниже её машинный перевод. Thinkpad X220 Tablet —. . .
PhpStorm 2025.3: WSL Terminal всегда стартует в ~
and_y87 14.12.2025
PhpStorm 2025. 3: WSL Terminal всегда стартует в ~ (home), игнорируя директорию проекта Симптом: После обновления до PhpStorm 2025. 3 встроенный терминал WSL открывается в домашней директории. . .
Как объединить две одинаковые БД Access с разными данными
VikBal 11.12.2025
Помогите пожалуйста !! Как объединить 2 одинаковые БД Access с разными данными.
Новый ноутбук
volvo 07.12.2025
Всем привет. По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне: Ryzen 5 7533HS 64 Gb DDR5 1Tb NVMe 16" Full HD Display Win11 Pro
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов На странице: https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/ нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Programma_Boinc 20.11.2025
Сколько Государство потратило денег на меня, обеспечивая инсулином. Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов. . . .
Ломающие изменения в C#.NStar Alpha
Etyuhibosecyu 20.11.2025
Уже можно не только тестировать, но и пользоваться C#. NStar - писать оконные приложения, содержащие надписи, кнопки, текстовые поля и даже изображения, например, моя игра "Три в ряд" написана на этом. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru