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

Ќахождение одинаковых чисел в массиве - C++

¬осстановить пароль –егистраци€
 
–ейтинг: –ейтинг темы: голосов - 9, средн€€ оценка - 4.78
eoLithic
0 / 0 / 0
–егистраци€: 05.01.2013
—ообщений: 32
12.01.2013, 19:12     Ќахождение одинаковых чисел в массиве #1
«драсьте всем, есть небольшой вопрос.

»меетс€ массив из п€ти элементов. Ќеобходимо найти в нем пары одинаковых чисел. —ортировка массива недопустима.
Ќиже € представил мой вариант решени€, но он не работает, если в массиве есть 3 и более одинаковых числа. ”кажите, пожалуйста, мне на мои ошибки и подскажите правильный вариант решени€ задачи.

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
#include <iostream>
#include <cstdlib>
#include <ctime>
#include <iomanip>
using namespace std;
 
int main()
{
    srand( time( 0 ) );
    
    int array[5];
    int i, j, skip;
    
    cout<<"Array of numbers: \n";
    for ( i = 0; i < 5; i++ )
    {
        array[i] = rand() % 10;
        cout<<setw(2)<<array[i];
        }
    
    cout<<endl;
    
    for ( i = 0; i < 5; i++ )
    {
        if ( skip == i ) continue;
        for ( j = 0; j < 5; j++ )
        {
            if ( i == j ) 
               continue;
            if ( array[i] == array[j] )
            {
               skip = j;
               cout<<"You have a pair of "<<array[i]<<endl;
            }
        }
    }
                 
    system("pause");
}
Similar
Ёксперт
41792 / 34177 / 6122
–егистраци€: 12.04.2006
—ообщений: 57,940
12.01.2013, 19:12     Ќахождение одинаковых чисел в массиве
ѕосмотрите здесь:

Ќахождение в массиве двух одинаковых чисел C++
Ќахождение всех четырехзначных натуральных чисел, в записи которых нет одинаковых цифрї. C++
ќпределить длину наибольшей последовательности одинаковых чисел в массиве C++
¬ массиве целых чисел найти и распечатать все пары одинаковых чисел C++
C++ ѕоиск 2-х и более одинаковых чисел в массиве
ѕосле регистрации реклама в сообщени€х будет скрыта и будут доступны все возможности форума.
UserAK
70 / 70 / 4
–егистраци€: 25.12.2012
—ообщений: 189
«аписей в блоге: 2
12.01.2013, 19:27     Ќахождение одинаковых чисел в массиве #2
÷итата —ообщение от eoLithic ѕосмотреть сообщение
int i, j, skip;
у ¬ас переменна€ skip не инициализирована.
попробуйте так:
C++
1
int i, j, skip(-1);
eoLithic
0 / 0 / 0
–егистраци€: 05.01.2013
—ообщений: 32
12.01.2013, 19:50  [“—]     Ќахождение одинаковых чисел в массиве #3
UserAK,
Ѕлин, спасибо гигантское, человек!

јпдейт:
ѕрограмма не работает даже с исправлением. “о есть работает, но через раз.
≈сли массив такой
5 5 5 8 3
то вывод программы будет таким. Ёто огорчает.

You have a pair of 5
You have a pair of 5
You have a pair of 5
You have a pair of 5
ƒл€ продолжени€ нажмите любую клавишу . . .
UserAK
70 / 70 / 4
–егистраци€: 25.12.2012
—ообщений: 189
«аписей в блоге: 2
12.01.2013, 20:13     Ќахождение одинаковых чисел в массиве #4
можно посоветовать завести ещЄ 1 массив и там отмечать все одинаковые елементы

ƒобавлено через 14 минут
например вот
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
#include <iostream>
#include <cstdlib>
#include <ctime>
#include <iomanip>
using namespace std;
 
int main()
{
    srand( time( 0 ) );
    
    int array[5];
    bool checked[5] = {0,0,0,0,0} ; // дополнительный массив
    bool HasPair;
    int i, j;
    
    cout<<"Array of numbers: \n";
    for ( i = 0; i < 5; i++ )
    {
        array[i] = rand() % 10;
        cout<<setw(2)<<array[i];
        }
    
    cout<<endl;
    
    for ( i = 0; i < 5; i++ )
    {
        if(!checked[i]){
            checked[i] = true;
            HasPair = false;
            for ( j = 0; j < 5; j++ ){
                if(!checked[j] && array[i] == array[j] ){
                    checked[j] = true;
                    HasPair = true;
                }
            }
            if(HasPair) cout<<"You have a pair of "<<array[i]<<endl;
       }
    }
                 
    system("pause");
}
David Sylva
 јватар дл€ David Sylva
1281 / 943 / 51
–егистраци€: 17.05.2012
—ообщений: 2,686
12.01.2013, 20:32     Ќахождение одинаковых чисел в массиве #5
UserAK ваш код не срабатывает верно, если три элемента.

ƒобавлено через 5 минут
Ќа скорую руку предлагаю, такой вариант
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 <iostream> 
 
int main() 
{ 
    const int size = 5; 
    int array[size] = { 2, 3, 3, 3, 2 };  
    int buffer[5]; 
    int i, j, k = 0, count = 0;
    bool flag = true;
 
    for ( i = 0; i < size; ++i)  
    {
        for ( j = 0 ; j < size; ++j) 
            if(array[i] == array[j]) 
                count++; 
        if(count == 2)  
        { 
            for ( int x = 0; x < k; ++x) 
                if(array[i] == buffer[x]) 
                { 
                    flag = false; 
                    break; 
                } 
                if(flag != false)  
                {
                    buffer[k++] = array[i]; 
                    std::cout << "You have pair of " << array[i] << std::endl;
                }  
                flag = true;
        } 
        count = 0; 
    }  
}
UserAK
70 / 70 / 4
–егистраци€: 25.12.2012
—ообщений: 189
«аписей в блоге: 2
12.01.2013, 20:33     Ќахождение одинаковых чисел в массиве #6
÷итата —ообщение от David Sylva ѕосмотреть сообщение
ваш код не срабатывает верно, если три элемента.
в этом коде если число имеет пару, то один раз об этом сообщаетс€ и про это число можно забыть.
а как надо?
David Sylva
 јватар дл€ David Sylva
1281 / 943 / 51
–егистраци€: 17.05.2012
—ообщений: 2,686
12.01.2013, 20:37     Ќахождение одинаковых чисел в массиве #7
÷итата —ообщение от UserAK ѕосмотреть сообщение
в этом коде если число имеет пару, то один раз об этом сообщаетс€ и про это число можно забыть.
а как надо?
¬ы мен€ наверное, не пон€ли.я попробовал ваш код с массивом 1, 1, 1, 2, 3 и он показал, что есть пара единиц.
Mysterion777
 јватар дл€ Mysterion777
-74 / 48 / 2
–егистраци€: 11.01.2013
—ообщений: 199
12.01.2013, 20:41     Ќахождение одинаковых чисел в массиве #8
вот алгоритм попробуй
C++
1
2
3
4
5
6
int a[5];int j,i;
for(i=0;i<5;i++){
for(j=i+1;j<5;j++)
if(a[i]==a[j])cout<<"пара "<<a[i]<<" "<<a[j]; 
 
}
UserAK
70 / 70 / 4
–егистраци€: 25.12.2012
—ообщений: 189
«аписей в блоге: 2
12.01.2013, 20:42     Ќахождение одинаковых чисел в массиве #9
÷итата —ообщение от David Sylva ѕосмотреть сообщение
¬ы мен€ наверное, не пон€ли.я попробовал ваш код с массивом 1, 1, 1, 2, 3 и он показал, что есть пара единиц.
ну да, единица имеет пару тут. разве этого не достаточно?
David Sylva
 јватар дл€ David Sylva
1281 / 943 / 51
–егистраци€: 17.05.2012
—ообщений: 2,686
12.01.2013, 20:44     Ќахождение одинаковых чисел в массиве #10
÷итата —ообщение от UserAK ѕосмотреть сообщение
ну да, единица имеет пару тут. разве этого не достаточно?
я так понимаю, смысл задачи в том, чтобы определЄнного числа в массиве было всего два, а не три, четыре и так далее.
UserAK
70 / 70 / 4
–егистраци€: 25.12.2012
—ообщений: 189
«аписей в блоге: 2
12.01.2013, 20:45     Ќахождение одинаковых чисел в массиве #11
÷итата —ообщение от David Sylva ѕосмотреть сообщение
я так понимаю, смысл задачи в том, чтобы определЄнного числа в массиве было всего два, а не три, четыре и так далее.
ой, об этом € и не подумал. но это же легко исправить, если надо.
David Sylva
 јватар дл€ David Sylva
1281 / 943 / 51
–егистраци€: 17.05.2012
—ообщений: 2,686
12.01.2013, 20:46     Ќахождение одинаковых чисел в массиве #12
Mysterion777 ¬аш алгоритм отработает не корректно.
eoLithic
0 / 0 / 0
–егистраци€: 05.01.2013
—ообщений: 32
12.01.2013, 20:50  [“—]     Ќахождение одинаковых чисел в массиве #13
≈сли это внесет небольшую €сность дл€ решени€ задачи: € пытаюсь создать покер, а там необходима функци€, котора€ провер€ет есть ли у игрока 2 пары. —ортировка массива недопустима, ибо значение карты и масть карты обозначены в двух, св€занных между собою, массивах.
ѕо€вилась небольша€ иде€.
Ќаходим пару, заносим их индексы в массив, и пропускаем итерацию цикла проверки схожести значений, если совпадают значени€ в массиве и n-а€ итераци€ цикла. ѕойду, поколдую с моей мыслью.
ValeryS
ћодератор
6377 / 4843 / 442
–егистраци€: 14.02.2011
—ообщений: 16,048
12.01.2013, 20:57     Ќахождение одинаковых чисел в массиве #14
÷итата —ообщение от eoLithic ѕосмотреть сообщение
—ортировка массива недопустима, ибо значение карты и масть карты обозначены в двух, св€занных между собою, массивах.
а создать структуру (или класс) котора€ описывает карту
и положить это в один массив не пробовал
eoLithic
0 / 0 / 0
–егистраци€: 05.01.2013
—ообщений: 32
12.01.2013, 21:01  [“—]     Ќахождение одинаковых чисел в массиве #15
ValeryS,
я как раз и создал класс, описывающий колоду карт.
¬ один массив положить не догадалс€, ибо не пойму как.

≈сли интересна реализаци€, то вот она:
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
#include <iostream>
#include <iomanip>
#include <cstdlib>
#include <ctime>
using namespace std;
#include "DeckOfCards.h"
 
const char * const DeckOfCards::suit[] = { "√Ј√•√∞√Ґ√•√©", "√°√≥√°√•√*", "√≤√∞√•√і", "√ѓ√®√™" };
const char * const DeckOfCards::face[] = { "√Т√≥√І", "√Д√Ґ√*", "√Т√∞√®", "√Ч√•√≤√ї√∞√•", "√П√њ√≤√Љ", "√Ш√•√±√≤√Љ", "√С√•√ђ√Љ", "√В√Ѓ√±√•√ђ√Љ", "√Д√•√Ґ√њ√≤√Љ", "√Д√•√±√њ√≤√Љ", "√В√*√Ђ√•√≤", "√Д√*√ђ√*", "√К√Ѓ√∞√Ѓ√Ђ√Љ" };
 
DeckOfCards::DeckOfCards() 
{                                                                   // √К√Ѓ√*√±√≤√∞√≥√™√≤√Ѓ√∞ √™√Ђ√*√±√±√* DeckOfCards
                          setlocale( 0, "" );                       // √Д√Ґ√≥√ђ√•√∞√*√ї√© √ђ√*√±√±√®√Ґ deck √ѓ√Ѓ √ѓ√Ѓ√∞√њ√§√™√≥ √І√*√ѓ√Ѓ√Ђ√*√њ√•√≤√±√њ
                          int i = 1;                                // √І√*√*√Ј√•√*√®√њ√ђ√® √Ѓ√≤ 1 √§√Ѓ 52
                          for ( int row = 0; row <= 3; row++ )
                          {
                              for ( int column = 0; column <= 12; column++ )
                              {
                                  deck[row][column] = i++;
                              }
                          }
                          
                          srand( time( 0 ) );
}
 
void DeckOfCards::shuffle() // √Э√Ђ√•√ђ√•√*√≤-√і√≥√*√™√ґ√®√њ √ѓ√•√∞√•√≤√*√±√Ѓ√Ґ√ї√Ґ√*√Њ√є√*√њ √™√Ѓ√Ђ√Ѓ√§√≥ √™√*√∞√≤
{
     int randRow;                                        
     int randColumn;
     int temp;
     for ( int row = 0; row <= 3; row++ )
     {
         for ( int column = 0; column <= 12; column++ )      // √Б√•√∞√•√≤√±√њ √≤√•√™√≥√є√®√© √љ√Ђ√•√ђ√•√*√≤ √ђ√*√±√±√®√Ґ√* deck
         {                                                   //  √Ѓ√°√ђ√•√*√®√Ґ√*√•√≤√±√њ √І√*√*√Ј√•√*√®√њ√ђ√® √± √Ґ√ї√°√∞√*√*√*√ї√ђ √*√*√≥√£√*√§
             randRow = rand() % 4;                           // √љ√Ђ√•√ђ√•√*√≤√Ѓ√ђ √ђ√*√±√±√®√Ґ√* deck
             randColumn = rand() % 13;
             
             temp = deck[ row ][ column ];
             deck[ row ][ column ] = deck[ randRow ][ randColumn ];
             deck[ randRow ][ randColumn ] = temp;
         }
     }
}
         
void DeckOfCards::deal()  // √Э√Ђ√•√ђ√•√*√≤-√і√≥√*√™√ґ√®√њ, √Ѓ√≤√Ґ√•√Ј√*√Њ√є√*√њ √І√* √∞√*√І√§√*√Ј√≥ √™√*√∞√≤
{
     
     for ( int card = 1; card <= 5; card++ )
     {
         int i = 0;
         for ( int row = 0; row <= 3; row++ )
         {
             for ( int column = 0; column <= 12; column++ )
             {
                 if ( deck[row][column] == card )
                 {
                      i = 1;     // √П√•√∞√•√ђ√•√*√*√*√њ, √ѓ√∞√® √®√І√ђ√•√*√•√*√®√® √™√Ѓ√≤√Ѓ√∞√Ѓ√© √Ѓ√°√•√±√ѓ√•√Ј√®√Ґ√*√•√≤√±√њ √Ґ√ї√µ√Ѓ√§ √®√І √ґ√®√™√Ђ√*, √§√Ђ√њ √®√І√°√*√Ґ√Ђ√•√*√®√њ √Ѓ√≤ √*√•√*√≥√¶√*√ї√µ √®√≤√•√∞√*√ґ√®√©.
                      cout<<face[ column ]<<" "<<suit[ row ]<<endl; // √П√Ѓ√™√*√І√*√≤√Љ √™√*√∞√≤√≥.
                      drawnCardsFace[ card ] = column; // √З√*√ѓ√Ѓ√ђ√®√*√*√•√ђ √™√*√∞√≤√ї √§√Ђ√њ √§√*√Ђ√Љ√*√•√©√Є√•√£√Ѓ
                      drawnCardsSuit[ card ] = row;    // √Ѓ√ѓ√∞√•√§√•√Ђ√•√*√®√њ √™√Ѓ√ђ√°√®√*√*√ґ√®√©
                      break;
                 }
             }
         if ( i ) break; 
         }
     }
}
UserAK
70 / 70 / 4
–егистраци€: 25.12.2012
—ообщений: 189
«аписей в блоге: 2
12.01.2013, 21:05     Ќахождение одинаковых чисел в массиве #16
вот если допустим 1 1 1 1 0 то выдаст 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
#include <iostream>
#include <cstdlib>
#include <ctime>
#include <iomanip>
using namespace std;
 
int main()
{
    srand( time( 0 ) );
    
    int array[5];
    bool checked[5];
    bool HasPair;
    int i, j;
    
    cout<<"Array of numbers: \n";
    for ( i = 0; i < 5; i++ ){
        array[i] = rand() % 10;
        checked[i] = false;
        cout<<setw(2)<<array[i];
    }
 
    cout<<endl;
    
    for ( i = 0; i < 5; i++ ){
        if(!checked[i]){
            HasPair = false;
            j = i;
            while(++j < 5){
                if(!checked[j] && array[i] == array[j]){
                    checked[j] = true;
                    HasPair = true;
                    break;
                }
            }
            if(HasPair) cout<<"You have a pair of "<<array[i]<<endl;
        }
    }
                 
    system("pause");
}
ValeryS
ћодератор
6377 / 4843 / 442
–егистраци€: 14.02.2011
—ообщений: 16,048
12.01.2013, 21:15     Ќахождение одинаковых чисел в массиве #17
÷итата —ообщение от eoLithic ѕосмотреть сообщение
я как раз и создал класс, описывающий колоду карт.
описать класс описывающий карту
например так
C++
1
2
3
4
5
6
class Card
{
public:
string suit;
string face;
}
тогда у колоды будет массив из 32 карт
а у игрока массив из 5 карт
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
class DeckOfCards
{
.............
 Card card[32];
...................
}
class Player
{
.............
 Card card[5];
...................
 
}
MoreAnswers
Ёксперт
37091 / 29110 / 5898
–егистраци€: 17.06.2006
—ообщений: 43,301
13.01.2013, 00:56     Ќахождение одинаковых чисел в массиве
≈ще ссылки по теме:

C++ Ќахождение номера столбца с максимальной серией одинаковых элементов в двумерном массиве
C++ Ќужно найти в массиве и распечатать пары одинаковых чисел
C++ Ќайти сумму одинаковых чисел в двумерном массиве

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

»ли воспользуйтесь поиском по форуму:
Mysterion777
 јватар дл€ Mysterion777
-74 / 48 / 2
–егистраци€: 11.01.2013
—ообщений: 199
13.01.2013, 00:56     Ќахождение одинаковых чисел в массиве #18
÷итата —ообщение от David Sylva ѕосмотреть сообщение
Mysterion777 ¬аш алгоритм отработает не корректно.
ѕочему?он найдет все парные числа в массиве из 5 элеметов без повторений(видимо € не правильно пон€л смысл задачи если так то извин€юсь)
Yandex
ќбъ€влени€
13.01.2013, 00:56     Ќахождение одинаковых чисел в массиве
ќтвет —оздать тему
ќпции темы

“екущее врем€: 17:32. „асовой по€с GMT +3.
 ибер‘орум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
–ейтинг@Mail.ru