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

Подсчитать количество различных элементов - C++

Восстановить пароль Регистрация
 
XTwister
0 / 0 / 0
Регистрация: 13.02.2013
Сообщений: 4
18.02.2013, 12:39     Подсчитать количество различных элементов #1
Подсчитать количество различных элементов в каждой из строк двумерного массива. Определить функцию подсчета различных элементов.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
18.02.2013, 12:39     Подсчитать количество различных элементов
Посмотрите здесь:

C++ Во введенном слове подсчитать количество различных пар букв
C++ Подсчитать количество различных цифр в десятичной записи натурального числа.
Подсчитать количество различных пар букв C++
Подсчитать количество различных по значению элементов в массиве C++
C++ Подсчитать количество различных элементов в очереди и вывести их на экран
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
es_
 Аватар для es_
198 / 198 / 46
Регистрация: 14.01.2013
Сообщений: 446
18.02.2013, 13:51     Подсчитать количество различных элементов #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
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
#include "stdafx.h"
#include <iostream>
#include <cstdlib>
#include <time.h>
using namespace std;
#define n 2
#define m 3
 
int positive (int Y[n][m])
{
    int i,j,k=0;
    for (i=0;i<n;i++)
    {
        for (j=0;j<m;j++)
        {
            if (Y[i][j]>0)
            {
                k++;
            }
        }
    }
    return k;
}
 
int _tmain(int argc, _TCHAR* argv[])
{
    srand(time(NULL));
    int X[n][m],y,i,j;
    for (i=0;i<n;i++)
    {
        for (j=0;j<m;j++)
        {
            X[i][j]=rand()%201+(-100);
        }
    }
    for (i=0;i<n;i++)
    {
        for (j=0;j<m;j++)
        {
            cout<<X[i][j]<<" ";
        }
        cout<<endl;
    }
    y=positive(X);
    cout<<"number of positive elements "<<y<<endl;
    cin>>i;
 
    return 0;
}
XTwister
0 / 0 / 0
Регистрация: 13.02.2013
Сообщений: 4
18.02.2013, 14:09  [ТС]     Подсчитать количество различных элементов #3
Разных элементов в каждой из строк. К примеру массив:

Ввод:
1 2 3 4 // тут 4 разных элемента
1 1 5 7 // тут 3
2 2 2 3 // тут 2
5 5 5 5 // тут 1
На выводе должно получится:
4 3 2 1

Полная программа выводит наибольшее количество разных элементов и наименьшее количество разных элементов.
То есть из ряда 4 3 2 1 из примера должно вывести 4 и 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
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
#include <iostream>
 
using namespace std;
 
int colmax(int* ar, int n)
{
    int c=0;
    int ccc=0;    
    int ii;
    for(int i=0; i<n; i++)
    {
        bool repeat=false;
        for(int j=i+1; j<n; j++)
        {
            if (ar[i] == ar[j])
                repeat = true;
        }
        if (!repeat)
            c++;
        for (ii=1; 1<c; ii++)
        {
            ccc++;
            c--;
        }
    }
    return ccc;
}
 
int colmin(int* ar, int n)
{
    int c=0;
    int ddd=0;    
    int ii;
    for(int i=0; i<n; i++)
    {
        bool repeat=false;
        for(int j=i+1; j<n; j++)
        {
            if (ar[i] == ar[j])
                repeat = true;
        }
        if (repeat)
            c++;
        for (ii=1; 1<c; ii++)
        {
            ddd++;
            c--;
        }
    }
    return ddd;
}
 
int main()
{
    int n;
    int m;
    int i=1;
    int j=1;
    int h;
    int g;   
    int o; 
    int max=0;
    int min=0;
    const int p=100;
    int ar[p];
    int masiv[100][100];
 
    setlocale(LC_ALL, "Russian");
 
    cout << "Введите количество строк n > " << endl;   
    cin >> n;
    cout << "Введите количество столбцов m > " << endl;
    cin >> m;   
 
    for (i=1; i<=n; i++)
    {
        for (j=1; j<=m; j++)
        {
            cout << "Введите элемент. Координаты: (" << i << ";" << j << ") >>>";
            cin >> masiv[i][j];
        }
    }
    h=0;    
    for (i=1; i<=n; i++)
    {
        for (j=1; j<=m; j++)
        {
            o=j;
            ar[o]=masiv[i][j];
        }
        h=colmax(ar, m);
        if (max<h)
        {
            max=h;
        }
    }
 
    g=0;    
    for (i=1; i<=n; i++)
    {
        for (j=1; j<=m; j++)
        {
            o=j;
            ar[o]=masiv[i][j];
        }
        g=colmin(ar, m);
        if (min<g)
        {
            min=g;
        }
    }
 
    for (i=1; i<=n; i++)
    {
        for (j=1; j<=m; j++)
        {
            cout.width(5);
            cout << masiv[i][j];
        }
        cout << endl;
    }
    cout << max << endl;
    cout << min << endl;
    system("pause");
    return 0;
}
ITcrusader
Эксперт C++
 Аватар для ITcrusader
176 / 162 / 8
Регистрация: 12.02.2013
Сообщений: 410
18.02.2013, 14:28     Подсчитать количество различных элементов #4
Смари, старина, так намного изящнее)))

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 <iostream>
#include <set>
 
template <class T> 
int NumberOfDifferentElements( T arr[], int arrSize )   
{
    std:: set<T> elements; // сюда сколько не пихай целых чисел, дубликатов не будет
    for( int i = 0; i < arrSize; i++ )  
    {   // вот и запихиваем сюда все элементы анализируемой строки матрицы
        elements.insert( arr[i] );
    }
    return elements.size(); // просто возвращаем кол-во элементов
}
 
int main()
{   // подготавливаем данные
    const int numberOfRows = 5;
    const int numberOfColumns = 5;
    int anArr[ numberOfRows ][ numberOfColumns ] = {
        1, 2, 3, 4, 5,
        1, 1, 5, 7, 3,
        2, 2, 2, 2, 3,
        3, 2, 1, 2, 4,
        2, 4, 5, 6, 7
    };
    
    for( int row = 0; row < numberOfRows; row++ )
    {   // обрабатываем теперь каждую строку и выводим результат:
        std:: cout << "row " << row << " contains " <<
            NumberOfDifferentElements( anArr[ row ], numberOfColumns ) <<
            " different values" << std:: endl;
    }
    return 0;
}

И функа работает для любых элементов, для которых определен оператор ==
Yandex
Объявления
18.02.2013, 14:28     Подсчитать количество различных элементов
Ответ Создать тему
Опции темы

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