Технический форум
Вернуться   Технический форум > Программирование > Форум программистов > Помощь студентам


Ответ
 
Опции темы Опции просмотра
Старый 12.07.2011, 01:47   #1 (permalink)
Lolo
Новичок
 
Регистрация: 12.07.2011
Сообщений: 4
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 10
По умолчанию Массивы

Дан массив целых чисел. Для каждого из этих чисел выяснить сколько раз каждое число входит в этот массив. Результат представить в виде ряда строк, первая из которых есть А1- k, где k - есть число вхождений А1 в последовательность. Вторая строка будет иметь вид Аi- m, где Аi -есть первый по порядку член, отличный от А1, m - число вхождений этого члена в последовательность и т.д.
т.е. например дан массив 6 9 3 1 3 6 6
элемент - кол-во вхождений
6 - 3
9 - 1
3 - 2
1 - 1
Сам хочу решить, ничего на ум не приходит. Как это можно реализовать?
Lolo вне форума   Ответить с цитированием

Старый 12.07.2011, 01:47
Helpmaster
Member
 
Аватар для Helpmaster
 
Регистрация: 08.03.2016
Сообщений: 0

Отправлю вам список полезных ссылок

Массивы
Массивы

Старый 12.07.2011, 11:39   #2 (permalink)
AlexZir
support
 
Аватар для AlexZir
 
Регистрация: 19.08.2007
Адрес: Зея
Сообщений: 15,797
Записей в дневнике: 71
Сказал(а) спасибо: 166
Поблагодарили 203 раз(а) в 86 сообщениях
Репутация: 75760
По умолчанию

язык программирования какой?

Реализовать можно через двумерный массив, через последовательный анализ одномерного массива, через последовательности и прочее...

В общих чертах, через двумерный массив алгоритм следующий:
Заводится двумерный массив [N,2], в 1 столбец которого в цикле анализа исходного массива заносятся встреченные числа, а во второй столбец - соответственно количество повторений каждого числа. По окончании анализа исходного массива выводится полученный двумерный массив.
__________________
Убить всех человеков!
AlexZir вне форума   Ответить с цитированием
Старый 12.07.2011, 12:58   #3 (permalink)
Vladimir_S
Специалист
 
Регистрация: 27.08.2008
Адрес: Санкт-Петербург
Сообщений: 27,807
Сказал(а) спасибо: 340
Поблагодарили 583 раз(а) в 208 сообщениях
Репутация: 113184
По умолчанию

Алекс, я уже прикидывал - тут есть одна тонкость, связанная с исключением повторов. Позже помаракую - сейчас некогда.
Vladimir_S вне форума   Ответить с цитированием
Старый 12.07.2011, 13:05   #4 (permalink)
AlexZir
support
 
Аватар для AlexZir
 
Регистрация: 19.08.2007
Адрес: Зея
Сообщений: 15,797
Записей в дневнике: 71
Сказал(а) спасибо: 166
Поблагодарили 203 раз(а) в 86 сообщениях
Репутация: 75760
По умолчанию

С этим никаких проблем - вложенные циклы и все дела!

А вот с ЯП - ещё та трудность.
__________________
Убить всех человеков!
AlexZir вне форума   Ответить с цитированием
Старый 12.07.2011, 14:28   #5 (permalink)
Lolo
Новичок
 
Регистрация: 12.07.2011
Сообщений: 4
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 10
По умолчанию

AlexZir
язык программирования С++, условия реализации - через одномерные массивы
Vladimir_S
Вы правы, здесь есть тонкость - повторяющиеся элементы. Есть вариант создать еще один массив, в него переписать элементы первого массива без повторений, и завести массив счетчиков, куда будет заносится кол-во вхождений каждого элемента, как-то так))
Lolo вне форума   Ответить с цитированием
Ads

Яндекс

Member
 
Регистрация: 31.10.2006
Сообщений: 40200
Записей в дневнике: 0
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 55070
Старый 12.07.2011, 14:51   #6 (permalink)
Vladimir_S
Специалист
 
Регистрация: 27.08.2008
Адрес: Санкт-Петербург
Сообщений: 27,807
Сказал(а) спасибо: 340
Поблагодарили 583 раз(а) в 208 сообщениях
Репутация: 113184
По умолчанию

Цитата:
Сообщение от Lolo Посмотреть сообщение
язык программирования С++
А - ну, значит, не ко мне! Можно продолжать бездельничать.
Vladimir_S вне форума   Ответить с цитированием
Старый 12.07.2011, 14:56   #7 (permalink)
AlexZir
support
 
Аватар для AlexZir
 
Регистрация: 19.08.2007
Адрес: Зея
Сообщений: 15,797
Записей в дневнике: 71
Сказал(а) спасибо: 166
Поблагодарили 203 раз(а) в 86 сообщениях
Репутация: 75760
По умолчанию

Вышеупомянутый мной двумерный массив можно представить как два одномерных массива с размерностью, не превышающей размерность исходного массива
__________________
Убить всех человеков!
AlexZir вне форума   Ответить с цитированием
Старый 12.07.2011, 17:24   #8 (permalink)
Lolo
Новичок
 
Регистрация: 12.07.2011
Сообщений: 4
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 10
По умолчанию

Вот, настрочила кой-чего

Код:
# include <conio.h>
# include <stdio.h>

void main ()
{
    const n = 7;
    int array1[n] = {3,8,3,12,11,8,8};  // оригинальный массив
    int array2[n] = {0};                // массив уникальных элемeнтов
    int array3[n] = {0};                // массив счетчиков
    int m = 0, index1 = 0, index2 = 0;
    
   for (int i = 0; i < n; i++)
   {
       int x = 0;   // счетчик кол-ва вхождений элемента в массив
       for (int j =  0; j < n; j++)
       {
          if (array1[i] == array1[j])
          {
            x++;
            m = array1[i];
          }
       }
       array2[index1] = m;
       index1++;
       array3[index2] = x;
       index2++;
   }
   for (i = 0; i < index2; i++)
   {
       printf ("%i - %i\n", array2[i], array3[i]);
   }
getch ();
}
Но как избавиться от повторяющихся элементов не могу понять Помогите пожалуйста
Lolo вне форума   Ответить с цитированием
Старый 13.07.2011, 10:07   #9 (permalink)
Vladimir_S
Специалист
 
Регистрация: 27.08.2008
Адрес: Санкт-Петербург
Сообщений: 27,807
Сказал(а) спасибо: 340
Поблагодарили 583 раз(а) в 208 сообщениях
Репутация: 113184
По умолчанию

Придумал один довольно-таки тупой алгоритм. Но работает. Реализация, к сожалению, на Паскале - на Си я не пишу. Полагаю, что перевести с языка на язык проблем не составит. Если, конечно, алгоритм устроит.
Суть:
1. Ищется максимальное значение исходного массива (М).
2. Путем последовательного перебора натуральных чисел (i) от 0 до М заполняется массив счетчиков количества вхождений каждого i в исходный массив.
3. Организован вывод опять же чисел i от 0 до М и соответствующих значений счетчиков, но только тех, где счетчики отличны от нуля.
Всё.
Код:
const
 n=7;
 array1:Array[1..n] of Integer= (3,8,3,12,11,8,8);  // оригинальный массив
var
 array3:Array[0..1000] of Integer;                // массив счетчиков
 M,i,j:Integer;
BEGIN
 M:=0;
 for i:=1 to n do
  if array1[i]>M then M:=array1[i];
 for i:=0 to M do array3[i]:=0;
 for i:=0 to M do
  for j:=1 to n do
   if array1[j]=i then Inc(array3[i]);
 for i:=0 to M do
  if array3[i]>0 then
   writeln(i:4,' - ',array3[i]);
 readln;
END.
Vladimir_S вне форума   Ответить с цитированием
Старый 14.07.2011, 15:50   #10 (permalink)
Lolo
Новичок
 
Регистрация: 12.07.2011
Сообщений: 4
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 10
По умолчанию

Цитата:
Сообщение от Vladimir_S Посмотреть сообщение
Реализация, к сожалению, на Паскале - на Си я не пишу.
Ничего страшного, и Паскаль учили когда-то . Алгоритм правда не совсем тот, все равно спасибо за помощь, буду думать дальше ))
Lolo вне форума   Ответить с цитированием
Ads

Яндекс

Member
 
Регистрация: 31.10.2006
Сообщений: 40200
Записей в дневнике: 0
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 55070
Ответ


Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Выкл.
HTML код Выкл.
Trackbacks are Вкл.
Pingbacks are Вкл.
Refbacks are Выкл.




Часовой пояс GMT +4, время: 02:11.

Powered by vBulletin® Version 6.2.5.
Copyright ©2000 - 2014, Jelsoft Enterprises Ltd.