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

Найти количество одинаковых элементов массива - C++

Восстановить пароль Регистрация
 
Рейтинг: Рейтинг темы: голосов - 21, средняя оценка - 4.67
Nasdfgh
0 / 0 / 0
Регистрация: 08.10.2009
Сообщений: 37
10.01.2010, 22:14     Найти количество одинаковых элементов массива #1
Помогите в решение я работаю на борланде Си
Задание:
Найти количество одинаковых элементов массива А(N) (N=21, элементы от -4 до 4)

Как можно сравнить элементы массива с элементами массива?

Если можно полностью прогу написать=)
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
10.01.2010, 22:14     Найти количество одинаковых элементов массива
Посмотрите здесь:

Найти наименьшее количество одинаковых, идущих подряд элементов C++
Найти количество одинаковых элементов массива C++
C++ количество одинаковых элементов массива
Найти номер последней из ее строк,содержащих максимальное количество одинаковых элементов. C++
C++ Найти номера двух одинаковых элементов массива
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Radjuk
 Аватар для Radjuk
134 / 68 / 12
Регистрация: 10.10.2009
Сообщений: 187
10.01.2010, 22:29     Найти количество одинаковых элементов массива #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
29
30
31
void main()
  {
   randomize();
   clrscr();
 
   int i,j,size=0,m=0,temp;
 
   int *A;
   A=(int *)calloc(21,sizeof(int));
 
   cout<<"\nmasiv:\n";
   for(i=0;i<21;i++)
    {
     A[i]=random(8)-4;
     cout<<A[i]<<" ";
    }
 
    for(i=0;i<21;i++)
     {
      for(j=0;j<21;j++)
       { 
        if(A[i] == A[j])
         {
          size++;
         }
       }
     }
     
     cout<<"\nSize="<<size;
 getch();
 }
easybudda
Модератор
Эксперт С++
 Аватар для easybudda
9371 / 5421 / 914
Регистрация: 25.07.2009
Сообщений: 10,423
10.01.2010, 22:34     Найти количество одинаковых элементов массива #3
Цитата Сообщение от Nasdfgh Посмотреть сообщение
Как можно сравнить элементы массива с элементами массива?
Самое простое - отсортировать (всё равно, по убыванию, или по возрастанию) и считать, сколько подряд одинаковых идёт...
outoftime
║XLR8║
 Аватар для outoftime
505 / 427 / 33
Регистрация: 25.07.2009
Сообщений: 2,297
10.01.2010, 22:37     Найти количество одинаковых элементов массива #4
easybudda, хитро
Radjuk
 Аватар для Radjuk
134 / 68 / 12
Регистрация: 10.10.2009
Сообщений: 187
10.01.2010, 22:40     Найти количество одинаковых элементов массива #5
да так намного проще
outoftime
║XLR8║
 Аватар для outoftime
505 / 427 / 33
Регистрация: 25.07.2009
Сообщений: 2,297
10.01.2010, 22:43     Найти количество одинаковых элементов массива #6
а можо создать масив на 9 элементов от -4 до 4 включительно и увеличивать значения для соответствующего индекса
Radjuk
 Аватар для Radjuk
134 / 68 / 12
Регистрация: 10.10.2009
Сообщений: 187
10.01.2010, 22:46     Найти количество одинаковых элементов массива #7
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
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
void sort(int *A);
 
void main()
  {
   randomize();
   clrscr();
   int i,j,size=0,m=0,temp;
   int *A;
   A=(int *)calloc(21,sizeof(int));
   cout<<"\nmasiv:\n";
   for(i=0;i<21;i++)
    {
     A[i]=random(8)-4;
     cout<<A[i]<<" ";
    }
   cout<<"\n";
   sort(A);
   for(i=0;i<21;i++)
     {
      cout<<A[i]<<" ";
     }
     m1:
    for(i=m;i<21;i++)
     {
      if(A[i] == A[i+1])
       {
        size ++;
       }
      else
       {
        m=i+1;
        goto m1;
       }
     }
    cout<<"Size="<<size;
 getch();
 } 
 void sort(int *A)
 {
  int temp,i,j;
  for(i=0;i<21;i++)
   {
    for(j=0;j<21;j++)
     {
      if(A[i]<A[j])
       {
        temp=A[i];
        A[i]=A[j];
        A[j]=temp;
       }
     }
   }
  }
outoftime
║XLR8║
 Аватар для outoftime
505 / 427 / 33
Регистрация: 25.07.2009
Сообщений: 2,297
10.01.2010, 22:47     Найти количество одинаковых элементов массива #8
C++
1
2
3
4
5
6
7
int mas[21];
int* a = (int *) calloc (9, sizeof(int));
a += 5;
for (int i = 0; i < 21; ++i)
     ++a[mas[i]];
for (int i = -4; i < 5; ++i)
     cout << i << " встречается - " << a[i] << "раз" << endl;
Добавлено через 38 секунд
Radjuk, а у меня кода на порядок меньше))
Radjuk
 Аватар для Radjuk
134 / 68 / 12
Регистрация: 10.10.2009
Сообщений: 187
10.01.2010, 22:49     Найти количество одинаковых элементов массива #9
outoftime, аххаха)
Nasdfgh
0 / 0 / 0
Регистрация: 08.10.2009
Сообщений: 37
10.01.2010, 22:52  [ТС]     Найти количество одинаковых элементов массива #10
Спасибо все ясно=)
Еще если можно вопрос: как можно вывести на двухмерный массив на экран с помощья оператора printf

Просто кусочеГ проги напишите=)
Radjuk
 Аватар для Radjuk
134 / 68 / 12
Регистрация: 10.10.2009
Сообщений: 187
10.01.2010, 22:54     Найти количество одинаковых элементов массива #11
C
1
2
3
4
5
6
7
8
for(i=0;i<n;i++)
 {
 for(j=0;j<n;j++)
  {
   printf("%d ",a[i][j]);
  }
 printf("\n");
}
outoftime
║XLR8║
 Аватар для outoftime
505 / 427 / 33
Регистрация: 25.07.2009
Сообщений: 2,297
10.01.2010, 22:54     Найти количество одинаковых элементов массива #12
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
int main()
{
       int mas[21];
       for (int i = 0; i < 21; ++i)
              mas[i] = rand()%9-4;
       int* a = (int *) calloc (9, sizeof(int));
       a += 5;
       for (int i = 0; i < 21; ++i)
              ++a[mas[i]];
       for (int i = -4; i < 5; ++i)
              cout << i << " встречается - " << a[i] << "раз" << endl;
       return 0;
}
easybudda
Модератор
Эксперт С++
 Аватар для easybudda
9371 / 5421 / 914
Регистрация: 25.07.2009
Сообщений: 10,423
10.01.2010, 23:27     Найти количество одинаковых элементов массива #13
Во:
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
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
 
int intCmp(const void *a, const void *b){
    return *(int*)a - *(int*)b;
}
 
/* Найти количество одинаковых элементов массива А(N) (N=21, элементы от -4 до 4 */
#define N 21
 
int main(void){
    int arr[N], i, j;
    
    srand(time(NULL));
    for ( i = 0; i < N; ++i )
        arr[i] = rand() % 9 - 4;
    
    printf("\nArray: ");
    for ( i = 0; i < N; ++i )
        printf("%2d ", arr[i]);
    printf("\nValue  Count\n");
    qsort(arr, N, sizeof(*arr), intCmp);
    for ( i = 0; i < N - 1; ){
        for ( j = i + 1; j < N && arr[i] == arr[j]; ++j )
            ;
        printf("%-7d%-5d\n", arr[i], j - i);
        i = j;
    }
    if ( i == N - 1 )
        printf("%-7d%-5d\n", arr[i], 1);
    
    return 0;
}
Добавлено через 22 минуты
Цитата Сообщение от outoftime Посмотреть сообщение
а можо создать масив на 9 элементов
А тоже вариант!
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
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
    
/* Найти количество одинаковых элементов массива А(N) (N=21, элементы от -4 до 4 */
#define N 21
#define T 9 /* top */
#define D 4 /* delta */
 
int main(void){
    int arr[N], cnt[T] = { 0 }, i;
    
    srand(time(NULL));
    for ( i = 0; i < N; ++i ){
        arr[i] = rand() % 9;
        printf("%d ", arr[i] - D);
        cnt[arr[i]] += 1;
    }
    
    for ( i = 0; i < T; ++i )
        printf("\n%d meet %d times", i - D, cnt[i]);
    
    return 0;
}
Но это хорошо, когда количество значений небольшим числом ограничено...
outoftime
║XLR8║
 Аватар для outoftime
505 / 427 / 33
Регистрация: 25.07.2009
Сообщений: 2,297
11.01.2010, 06:35     Найти количество одинаковых элементов массива #14
Цитата Сообщение от easybudda Посмотреть сообщение
А тоже вариант!
причем посмотрите на сколько короче))
Nasdfgh
0 / 0 / 0
Регистрация: 08.10.2009
Сообщений: 37
11.01.2010, 22:20  [ТС]     Найти количество одинаковых элементов массива #15
я сделал так можете подправить а то значения выдаёт приличные
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
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
 
void main()
{
  int i, j, size, A[21];
 
  srand(time(NULL));
 
  for (i = 0; i < 21; i++)
   A[i] = rand()%28 - 6;
 
  A[j] = A[i];
 
  for (i = 0; i < 21; i++)
   {
     for(j = 0; j < 21; j++)
      if(A[i] == A [j])
       size++;
   }
  printf("otvet:%d\n", size);
  system("PAUSE");
}
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
11.01.2010, 22:57     Найти количество одинаковых элементов массива
Еще ссылки по теме:

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

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

Или воспользуйтесь поиском по форуму:
easybudda
Модератор
Эксперт С++
 Аватар для easybudda
9371 / 5421 / 914
Регистрация: 25.07.2009
Сообщений: 10,423
11.01.2010, 22:57     Найти количество одинаковых элементов массива #16
Цитата Сообщение от Nasdfgh Посмотреть сообщение
A[i] = rand()%28 - 6;
хм... задание изменилось?
C
1
2
3
4
5
6
  for (i = 0; i < 21; i++)
   {
     for(j = 0; j < 21; j++)
      if(A[i] == A [j])
       size++;
   }
в принципе не правильно! так получится, что если одно значение 3 раза (к примеру) в массиве встречается, то оно три раза по три посчитается, получится 9. Потому и нужно либо чтобы значения подряд шли, либо второй массив заводить, в котором значения первого в качестве индексов будут. Ну может и ещё какой хитрый способ есть, но его тут пока никто не озвучил.
Yandex
Объявления
11.01.2010, 22:57     Найти количество одинаковых элементов массива
Ответ Создать тему
Опции темы

Текущее время: 07:41. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru