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

По массивам... - C++

Восстановить пароль Регистрация
 
Xorus
0 / 0 / 0
Регистрация: 03.11.2009
Сообщений: 10
28.11.2009, 21:39     По массивам... #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
#include <stdlib.h>
#include <iomanip.h>
#include <conio.h>
#include <iostream.h>
#include<time.h>                                                                                                                                        
const int n=20;
void pov(int *);
void ar(int *);
 
int main()
{     
 int  array[n];
 srand (time(0));             
ar(array);
pov(array);           
_getch();        
return 0;   
}
// Задаём случайные значения эллементов массива
void ar(int *arr)
{ for (int i=0; i<n; i++)
{ arr[i]=rand()/327;
cout<<setw(3)<<arr[i]<<" ";if (!((i+1)% 5)) cout << endl; } cout<<endl;
}
// Ищем совпадающие
void pov(int *arr)
{   for (int k=0; k<n; k++)
           { for (int i=0; i<n; i++)
                               {if (i!=k  && arr[k]==arr[i]) cout<<arr[k]<<" "<<endl; }
           }
}


Как сделать так, чтобы выводились числа без повторов?
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
manfeese
 Аватар для manfeese
128 / 127 / 16
Регистрация: 04.01.2009
Сообщений: 415
28.11.2009, 21:43     По массивам... #2
Строка 29, добавь оператор break
C++
1
 {if (i!=k  && arr[k]==arr[i]) cout<<arr[k]<<" "<<endl; break; }
Xorus
0 / 0 / 0
Регистрация: 03.11.2009
Сообщений: 10
28.11.2009, 22:08  [ТС]     По массивам... #3
Так не идёт, с break'ом он ищет пары только для 1ого числа
valeriikozlov
Эксперт C++
 Аватар для valeriikozlov
4660 / 2486 / 321
Регистрация: 18.08.2009
Сообщений: 4,550
28.11.2009, 22:11     По массивам... #4
manfeese,
таким способом, проверка не заканчивается, получается преждевременный выход из цикла.
Предлагаю вариант:
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 <stdlib.h>
#include <iomanip.h>
#include <conio.h>
#include <iostream.h>
#include<time.h>                                                                                                                                        
const int n=20;
void pov(int *);
void ar(int *);
 
int main()
{         
 int  array[n];
 srand (time(0));             
ar(array);
pov(array);           
_getch();        
return 0;       
}
// Г‡Г*Г¤Г*ВёГ¬ ñëó÷Г*Г©Г*ûå Г§Г*Г*Г·ГҐГ*ГЁГї ýëëåìåГ*òîâ Г¬Г*Г±Г±ГЁГўГ*
void ar(int *arr)
{ for (int i=0; i<n; i++)
{ arr[i]=rand()/327;
cout<<setw(3)<<arr[i]<<" ";if (!((i+1)% 5)) cout << endl; } cout<<endl;
}
// Èùåì ñîâïГ*Г¤Г*ГѕГ№ГЁГҐ
void pov(int *arr)
{
    int fl, i;
        for (int k=0; k<n; k++)
        {fl=1; 
            for (i=0; i<k; i++)
                if(arr[k]==arr[i])
                    fl=0;
            for (i=k+1; i<n; i++)
                if (arr[k]==arr[i] && fl) cout<<arr[k]<<endl; }
           
}
manfeese
 Аватар для manfeese
128 / 127 / 16
Регистрация: 04.01.2009
Сообщений: 415
28.11.2009, 22:23     По массивам... #5
Должно работать
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
void pov(int *arr)
{ int A = new int[n];
  int index = 0;
  for (int k=0; k<n; k++)
     for (int i=k+1; i<n; i++)
        {
           if (arr[k]==arr[i])  
                for (int j = 0; j<=index;j++) 
                   if (A[j]==arr[i]) goto Next;
                              
          A[index++]=arr[k]; 
          break;
       }
 
  for (int k=0; k<=index; k++) cout<<A[k];
}
Xorus
0 / 0 / 0
Регистрация: 03.11.2009
Сообщений: 10
28.11.2009, 22:35  [ТС]     По массивам... #6
valeriikozlov,
этот вариант работает только если повторяющихся чисел не больше 2. При 3 и более начинает выдавать повторы.

Добавлено через 8 минут
manfeese,
Если елси не затруднит можете обьяснить что озночает
C++
1
 int A = new int[n];
?

PS Выдаёт ошибки, можно прогу целиком?
valeriikozlov
Эксперт C++
 Аватар для valeriikozlov
4660 / 2486 / 321
Регистрация: 18.08.2009
Сообщений: 4,550
28.11.2009, 22:40     По массивам... #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
#include <stdlib.h>
#include <iomanip.h>
#include <conio.h>
#include <iostream.h>
#include<time.h>                                                                                                                                        
const int n=20;
void pov(int *);
void ar(int *);
 
int main()
{         
 int  array[n];
 srand (time(0));             
ar(array);
pov(array);           
_getch();        
return 0;       
}
// Г‡Г*Г¤Г*ВёГ¬ ñëó÷Г*Г©Г*ûå Г§Г*Г*Г·ГҐГ*ГЁГї ýëëåìåГ*òîâ Г¬Г*Г±Г±ГЁГўГ*
void ar(int *arr)
{ for (int i=0; i<n; i++)
{ arr[i]=rand()/327;
cout<<setw(3)<<arr[i]<<" ";if (!((i+1)% 5)) cout << endl; } cout<<endl;
}
// Èùåì ñîâïГ*Г¤Г*ГѕГ№ГЁГҐ
void pov(int *arr)
{
        int fl, fl1, i;
                for (int k=0; k<n; k++)
                {fl=1; 
                        for (i=0; i<k; i++)
                                if(arr[k]==arr[i])
                                        fl=0;
                                fl1=1;
                        for (i=k+1; i<n; i++)
                                if (arr[k]==arr[i] && fl &&fl1)
                                {
                                    cout<<arr[k]<<endl; fl1=0;}
                        
                }
           
}
manfeese
 Аватар для manfeese
128 / 127 / 16
Регистрация: 04.01.2009
Сообщений: 415
28.11.2009, 22:50     По массивам... #8
Цитата Сообщение от Xorus Посмотреть сообщение
Если елси не затруднит можете обьяснить что озночает Код C++
1
int A = new int[n];
?
Динамическое выделение массива
да и забыл вставить в конце
C++
1
delete[] A;
Цитата Сообщение от Xorus Посмотреть сообщение
PS Выдаёт ошибки, можно прогу целиком?
А что за ошибки? конкретно!!!
Андрейка
419 / 223 / 27
Регистрация: 25.03.2009
Сообщений: 744
28.11.2009, 23:08     По массивам... #9
C++
1
2
3
4
5
6
7
8
9
#include <iostream>
#include <algorithm>
int main()
{
    int mass[] = {1,1,1,3,3,4,2,3,3,5,6,5};
    std::sort(mass,mass+sizeof(mass)/sizeof(*mass));
    std::copy(mass,std::unique(mass,mass+sizeof(mass)/sizeof(*mass)),std::ostream_iterator<int>(std::cout," "));
    return 0;
}
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
29.11.2009, 01:33     По массивам...
Еще ссылки по теме:

Подскажите по массивам C++
Учебник по массивам C++
C++ по массивам
C++ Программа по массивам
C++ Задача по массивам

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

Или воспользуйтесь поиском по форуму:
Xorus
0 / 0 / 0
Регистрация: 03.11.2009
Сообщений: 10
29.11.2009, 01:33  [ТС]     По массивам... #10
valeriikozlov,
Понравилась идея с fl и fl1, насколько я понимаю должно работать нормально, спс.
Yandex
Объявления
29.11.2009, 01:33     По массивам...
Ответ Создать тему
Опции темы

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