12.07.2011, 01:47 | #1 (permalink) |
Новичок
Регистрация: 12.07.2011
Сообщений: 4
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 10
|
Массивы
т.е. например дан массив 6 9 3 1 3 6 6 элемент - кол-во вхождений 6 - 3 9 - 1 3 - 2 1 - 1 Сам хочу решить, ничего на ум не приходит. Как это можно реализовать? |
12.07.2011, 01:47 | |
Helpmaster
Member
Регистрация: 08.03.2016
Сообщений: 0
|
Отправлю вам список полезных ссылок Массивы Массивы |
12.07.2011, 11:39 | #2 (permalink) |
support
Регистрация: 19.08.2007
Адрес: Зея
Сообщений: 15,797
Записей в дневнике: 71
Сказал(а) спасибо: 166
Поблагодарили 203 раз(а) в 86 сообщениях
Репутация: 75760
|
язык программирования какой?
Реализовать можно через двумерный массив, через последовательный анализ одномерного массива, через последовательности и прочее... В общих чертах, через двумерный массив алгоритм следующий: Заводится двумерный массив [N,2], в 1 столбец которого в цикле анализа исходного массива заносятся встреченные числа, а во второй столбец - соответственно количество повторений каждого числа. По окончании анализа исходного массива выводится полученный двумерный массив.
__________________
Убить всех человеков! |
12.07.2011, 12:58 | #3 (permalink) |
Специалист
Регистрация: 27.08.2008
Адрес: Санкт-Петербург
Сообщений: 27,807
Сказал(а) спасибо: 340
Поблагодарили 583 раз(а) в 208 сообщениях
Репутация: 113184
|
Алекс, я уже прикидывал - тут есть одна тонкость, связанная с исключением повторов. Позже помаракую - сейчас некогда.
|
12.07.2011, 13:05 | #4 (permalink) |
support
Регистрация: 19.08.2007
Адрес: Зея
Сообщений: 15,797
Записей в дневнике: 71
Сказал(а) спасибо: 166
Поблагодарили 203 раз(а) в 86 сообщениях
Репутация: 75760
|
С этим никаких проблем - вложенные циклы и все дела!
А вот с ЯП - ещё та трудность.
__________________
Убить всех человеков! |
12.07.2011, 14:28 | #5 (permalink) |
Новичок
Регистрация: 12.07.2011
Сообщений: 4
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 10
|
AlexZir
язык программирования С++, условия реализации - через одномерные массивы Vladimir_S Вы правы, здесь есть тонкость - повторяющиеся элементы. Есть вариант создать еще один массив, в него переписать элементы первого массива без повторений, и завести массив счетчиков, куда будет заносится кол-во вхождений каждого элемента, как-то так)) |
Ads | |
Member
Регистрация: 31.10.2006
Сообщений: 40200
Записей в дневнике: 0
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 55070
|
12.07.2011, 14:56 | #7 (permalink) |
support
Регистрация: 19.08.2007
Адрес: Зея
Сообщений: 15,797
Записей в дневнике: 71
Сказал(а) спасибо: 166
Поблагодарили 203 раз(а) в 86 сообщениях
Репутация: 75760
|
Вышеупомянутый мной двумерный массив можно представить как два одномерных массива с размерностью, не превышающей размерность исходного массива
__________________
Убить всех человеков! |
12.07.2011, 17:24 | #8 (permalink) |
Новичок
Регистрация: 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 (); } |
13.07.2011, 10:07 | #9 (permalink) |
Специалист
Регистрация: 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. |
14.07.2011, 15:50 | #10 (permalink) |
Новичок
Регистрация: 12.07.2011
Сообщений: 4
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 10
|
|
Ads | |
Member
Регистрация: 31.10.2006
Сообщений: 40200
Записей в дневнике: 0
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 55070
|
|
|