Форум программистов, компьютерный форум CyberForum.ru

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
Рейтинг: Рейтинг темы: голосов - 11, средняя оценка - 4.91
Asseni
24 / 24 / 1
Регистрация: 13.06.2010
Сообщений: 184
#1

Для каждого из чисел массива выяснить, сколько раз каждое из них входит в этот массив - C++

15.07.2011, 15:04. Просмотров 1460. Ответов 10
Метки нет (Все метки)

Задача
Дан массив целых чисел. Для каждого из этих чисел выяснить сколько раз каждое число входит в этот массив. Результат представить в виде ряда строк, первая из которых есть А1- k, где k - есть число вхождений А1 в последовательность. Вторая строка будет иметь вид Аi- m, где Аi -есть первый по порядку член, отличный от А1, m - число вхождений этого члена в последовательность и т.д.
т.е. например дан массив 11,25,4,11,11,4,9
элемент - кол-во вхождений
11 - 3
25 - 1
4 - 2
9 - 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
24
25
26
27
28
29
30
31
32
33
# include <conio.h>
# include <stdio.h>
 
void main ()
{
    const n = 7;
    int array1[n] = {11,25,4,11,11,4,9};  // оригинальный массив
    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 ();
}
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
15.07.2011, 15:04     Для каждого из чисел массива выяснить, сколько раз каждое из них входит в этот массив
Посмотрите здесь:

C++ Вычислить, сколько раз каждый элемент массива входит в массив
C++ Дана последовательность чисел. Выяснить , сколько раз в ней встречается максимальное число.
Одномерный массив: сколько раз повторяется каждое число C++
C++ Выяснить, сколько чисел входит в последовательность более чем по одному разу
Выяснить, сколько чисел входит в последовательность по одному разу C++
Дана последовательность чисел. Выяснить , сколько раз в ней встречается максимальное число. C++
Дана последовательность чисел. Выяснить, сколько раз в ней встречается максимальное число C++
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
valeriikozlov
Эксперт C++
4667 / 2493 / 321
Регистрация: 18.08.2009
Сообщений: 4,550
15.07.2011, 15:33     Для каждого из чисел массива выяснить, сколько раз каждое из них входит в этот массив #2
Asseni, Ну самое простое исправить Ваш код так:
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
29
30
31
32
33
34
35
36
37
38
# include <conio.h>
# include <stdio.h>
 
void main ()
{
    const int n = 7;
    int array1[n] = {11,25,4,11,11,4,9};  // оригинальный массив
    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])
          {
              if(j<i)
                  break;
            x++;
            m = array1[i];
          }
       }
       if(x!=0)
       {
            array2[index1] = m;
            index1++;
            array3[index2] = x;
            index2++;
       }
   }
   for (int i = 0; i < index2; i++)
   {
       printf ("%i - %i\n", array2[i], array3[i]);
   }
getch ();
}
M__A__K
47 / 47 / 2
Регистрация: 09.11.2010
Сообщений: 306
15.07.2011, 15:38     Для каждого из чисел массива выяснить, сколько раз каждое из них входит в этот массив #3
а в чём собственно проблема?
я запустил (исправив мелкие опечатки) и всё норм...

valeriikozlov, вместо if ( j < i ) можно цикл for (int j = 0; j < n; j++) заменить на for (int j = i; j < n; j++). проверка if(x!=0) вообще не нужна, т.к. элемент минимум 1 раз в массиве есть всегда
valeriikozlov
Эксперт C++
4667 / 2493 / 321
Регистрация: 18.08.2009
Сообщений: 4,550
15.07.2011, 15:52     Для каждого из чисел массива выяснить, сколько раз каждое из них входит в этот массив #4
Цитата Сообщение от M__A__K Посмотреть сообщение
вместо if ( j < i ) можно цикл for (int j = 0; j < n; j++) заменить на for (int j = i; j < n; j++).
неправильно. Например для данной последовательности: 11,25,4,11,11,4,9
будет выведено:
11 - 3
...
11 -2
11-1
...
co6ak
Кошковед
407 / 500 / 29
Регистрация: 12.04.2010
Сообщений: 1,392
15.07.2011, 16:00     Для каждого из чисел массива выяснить, сколько раз каждое из них входит в этот массив #5
пошли бы ректальным путем. сортировку, и только потом переписывали бы ))
xAtom
914 / 739 / 60
Регистрация: 09.12.2010
Сообщений: 1,346
Записей в блоге: 1
15.07.2011, 16:02     Для каждого из чисел массива выяснить, сколько раз каждое из них входит в этот массив #6
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
29
30
31
32
33
34
35
36
37
#include <stdio.h>
 
int main(void){
 
  const int size      = 7;
  int       arr[size] = { 11, 25, 4, 11, 11, 4, 9 };
  int       cnts[size];
  int       uniq[size];
  int       size_uniq = 0, chet;
 
  short id;
  for(int i = 0; i < size; i++) {
      chet = 0;
      for(int t = 0; t < size; t++) {
          if(arr[i] == arr[t])
              chet++;
      }
      id = 0;
      for(int u = 0; u < size_uniq; u++) {
         if(arr[i] == uniq[u]){
            id = 1;
            break;
         }
      }
      if(! id) {
         cnts[size_uniq] = chet;
         uniq[size_uniq] = arr[i];
         size_uniq++;
      }
  }
 
  for(int k = 0; k < size_uniq; k++)
      printf("%i - %i\n", uniq[k], cnts[k]);
 
  getchar();
  return 0;
}
valeriikozlov
Эксперт C++
4667 / 2493 / 321
Регистрация: 18.08.2009
Сообщений: 4,550
15.07.2011, 16:06     Для каждого из чисел массива выяснить, сколько раз каждое из них входит в этот массив #7
Цитата Сообщение от co6ak Посмотреть сообщение
пошли бы ректальным путем. сортировку, и только потом переписывали бы ))
Цитата Сообщение от Asseni Посмотреть сообщение
Результат представить в виде ряда строк, первая из которых есть А1- k, где k - есть число вхождений А1 в последовательность. Вторая строка будет иметь вид Аi- m, где Аi -есть первый по порядку член, отличный от А1, m - число вхождений этого члена в последовательность и т.д.
сортировка здесь не пройдет ))
co6ak
Кошковед
407 / 500 / 29
Регистрация: 12.04.2010
Сообщений: 1,392
15.07.2011, 16:08     Для каждого из чисел массива выяснить, сколько раз каждое из них входит в этот массив #8
смотря как сортировать...
я не говорил что каким-нить пузырьком по возрастанию...
M__A__K
47 / 47 / 2
Регистрация: 09.11.2010
Сообщений: 306
15.07.2011, 16:08     Для каждого из чисел массива выяснить, сколько раз каждое из них входит в этот массив #9
valeriikozlov, прошу прощения, я не достаточно внимательно просмотрел ваш код
Asseni
24 / 24 / 1
Регистрация: 13.06.2010
Сообщений: 184
15.07.2011, 16:12  [ТС]     Для каждого из чисел массива выяснить, сколько раз каждое из них входит в этот массив #10
valeriikozlov
Как все просто оказалось, спасибо за помощь

xAtom
можно и так, заметила что лишняя переменная имеется, заменила index1 и index2 на index, и вместо id = 1, удобно будет bool применить, ну это на любителя

Всем огромное спасибо!!!
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
15.07.2011, 16:12     Для каждого из чисел массива выяснить, сколько раз каждое из них входит в этот массив
Еще ссылки по теме:

C++ Для каждого элемента вектора определить, сколько раз он встречается в матрице
Дан массив ненулевых целых чисел. Определить, сколько раз элементы массива при просмотре от его начала меняют знак. Например, в массиве 10, -4, 12, -4 C++
C++ Выяснить сколько раз встречается максимальный элемент двумерного массива
Для каждого из слов указать, сколько раз оно встречается в заданном тексте C++
Выяснить, сколько раз в данную последовательность входит группа подряд идущих символов, образующих слово C++

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

Или воспользуйтесь поиском по форуму:
valeriikozlov
Эксперт C++
4667 / 2493 / 321
Регистрация: 18.08.2009
Сообщений: 4,550
15.07.2011, 16:12     Для каждого из чисел массива выяснить, сколько раз каждое из них входит в этот массив #11
Цитата Сообщение от M__A__K Посмотреть сообщение
прошу прощения, я не достаточно внимательно просмотрел ваш код
не за что )))
код на самом деле изначально не мой )))
Yandex
Объявления
15.07.2011, 16:12     Для каждого из чисел массива выяснить, сколько раз каждое из них входит в этот массив
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru