Форум программистов, компьютерный форум, киберфорум
C для начинающих
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.88/8: Рейтинг темы: голосов - 8, средняя оценка - 4.88
11 / 11 / 8
Регистрация: 18.09.2012
Сообщений: 514
1

Дописать или подправить алгоритм вывода неповторяющихся элементов в массиве

27.01.2016, 13:26. Показов 1481. Ответов 15
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
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
#include <conio.h>
#include <stdio.h>
#include <stdlib.h>
#define n 7
void main()
{
randomize();
clrscr();
int a[n];
int b[n];
int c,k;
printf ("\n ishodnyi ¬*ббЁў:");
for (int i=0; i<n;i++)
{
a[i]=random (10);
printf ("%5i",a[i]);
}
              // zapisat te kotorye vstrechautca 1 raz
for (i=0; i<n; i++)
{
k=a[i];
c=0;
 for (int j=0; j<n;j++)
 {
  if (k==a[j])
   c++;
   //вот тут вроде должны записываться  те элементы которые не повторяются в массиве.
}
}
printf ("\n");
printf (" izmenenyi massiv");
for (i=0; i<n;i++)
printf ("%5i",b[i]);
 
getch();
}
к примеру есть массив 3 0 9 8 7 9
должен записаться вот так 3 0 8 7
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
27.01.2016, 13:26
Ответы с готовыми решениями:

Написать алгоритм решения задачи: Найти количество неповторяющихся чисел в массиве
Задан массив целых чисел А1,А2,...,Аm. Найти кол-во неповторяющихся чисел в этом массиве. Срочно...

Количество неповторяющихся элементов в массиве
Ввести массив и определить количество неповторяющихся элементов в нем чуток написал а вот дальше...

Поиск неповторяющихся элементов в массиве
Подскажите пожалуйста более умный алгоритм для поиска разных элементов в трёх массивах A,B,C....

Объясните алгоритм как найти минимальный из неповторяющихся элементов матрицы
Читал подобною тему, не могу понять сам алгоритм

15
104 / 104 / 99
Регистрация: 30.06.2015
Сообщений: 272
27.01.2016, 13:51 2
pirat2k, вот подправьте под себя как вам нужно

C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
#include <stdio.h>
 
int main()
{
    int arr[] = {3, 0, 9, 8, 7, 9};
    int i,j;
    int flag=0;
    for(i=0;i<6;i++)
    {
        for(j=0;j<6;j++)
        {
            if(arr[i]==arr[j] && j!=i)
                flag=1;
        }
        if(!flag)
            printf("%d ",arr[i]);
        else
            flag=0;
    }
    printf("\n");
    return 0;
}
0
78 / 77 / 51
Регистрация: 30.03.2013
Сообщений: 194
27.01.2016, 14:12 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
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
#include <stdio.h>
#include <conio.h>
#include <locale.h>
#include <time.h>
#include <stdlib.h>
 
int main(int argc, char *argv[])
{
    setlocale(LC_ALL, "RU");
 
    int n;
    puts("Введите число элементов массива");
    while(1){
        scanf("%d", &n);
        if(n < 1){
            puts("Число должно быть положительным, введите ещё раз");}
        else{
            break;}
    }
 
    int arr[n];
 
    int b = 1;
    while (b){
        puts("1 - Сгенерировать массив");
        puts("2 - Ввести массив");
        scanf("%d", &b);
 
        switch (b){
            case 1:{
                puts("Сгенерированный массив:");
                srand(time(NULL));
                for (int i = 0; i < n; ++i){
                    arr[i] = rand() % 11;
                    printf("%d ", arr[i]);}
                puts("");
                b = 0;
                break;}
            case 2:{
                puts("Введите элементы массива");
                for (int i = 0; i < n; ++i){
                    scanf("%d", &arr[i]);}
                b = 0;
                break;}
            default:{
                puts("Не верно сделан выбор, попробуйте ещё раз");
                b = 1;}
        }
    }
 
    puts("Неповторяющиеся элементы массива:");
    for(int i=0; i<n; ++i){
        b = 1;
        for(int j=0; j<n; ++j){
            if(i == j){
                continue;}
            if(arr[i] == arr[j]){
                b = 0;
                break;}
        }
        if(b){
            printf("%d ", arr[i]);}
    }
    puts("");
 
    puts("Нажмите любую клавишу для выхода");
    _getch();
 
    return 0;
}
0
11 / 11 / 8
Регистрация: 18.09.2012
Сообщений: 514
27.01.2016, 18:40  [ТС] 4
Цитата Сообщение от ThePlague Посмотреть сообщение
вот подправьте под себя как вам нужно
при обьявлении массива какое то муторное значение появляется
C
1
2
3
4
5
6
printf ("\n ishodnyi massiv");
for (int i=0; i<n;i++)
{
a[i]=random (10);
printf ("%5i",a[i]);
}
Миниатюры
Дописать или подправить алгоритм вывода неповторяющихся элементов в массиве  
0
11 / 11 / 8
Регистрация: 18.09.2012
Сообщений: 514
28.01.2016, 10:20  [ТС] 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
#include <conio.h>
#include <stdio.h>
#include <stdlib.h>
#define n 7
void main()
{
randomize();
clrscr();
int a[n];
int c;
printf ("\n ishodnyi massiv:");
for (int i=0; i<n;i++)
{
a[i]=random (10);
printf ("%5i",a[i]);
}
c=0;              // zapisat te kotorye vstrechautca 1 raz
for (i=0; i<n; i++)
{
 for (int j=0; j<n;j++)
 {
  if (a[i]==a[j]&& j!=i)
   c++;
   }
   if (!c)
   printf ("%d \n",a[i]);
   else
   c=0;
}
getch();
}
в последнем элементе появляется какое то левое значение, помогите разобраться как с этим справится
0
104 / 104 / 99
Регистрация: 30.06.2015
Сообщений: 272
28.01.2016, 10:57 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
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
 
#define n 7
 
int main()
{
    srand(time(NULL));
    int arr[n];
    int i,j,z;
    int flag=0;
    for(z=0;z<n;z++)
    {
        arr[z] = rand()%10+1;
        printf("%d ",arr[z]);
    }
    printf("\n");
    for(i=0;i<n;i++)
    {
        for(j=0;j<n;j++)
        {
            if(arr[i]==arr[j] && j!=i)
                flag=1;
        }
        if(!flag)
            printf("%d ",arr[i]);
        else
            flag=0;
    }
    printf("\n");
    return 0;
}
0
737 / 542 / 416
Регистрация: 17.09.2015
Сообщений: 1,601
28.01.2016, 10:58 7
pirat2k,
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
#include <stdio.h>
#include <stdlib.h>
#include <conio.h>
#define N 7
int main()
{
    int a[N];
    int c = 0, j, i;
    printf ("\nishodnyi massiv:\n");
    for ( i = 0; i < N; i++){
        a[i] = rand()%10;
        printf ("%d ",a[i]);
        }
    printf("\nZnachenia vstrechautsa 1 raz:\n");
    for (i = 0; i < N; i++){
        for ( j = 0; j < N; j++){
            if (a[i] == a[j] && j != i)
                c++;
                }
            if (!c)
                printf ("%d ", a[i]);
            else
                c = 0;
            }
    return 0;
}
0
11 / 11 / 8
Регистрация: 18.09.2012
Сообщений: 514
28.01.2016, 12:44  [ТС] 8
спасибо, проблему решил так, вроде левые значения не появляются
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 <conio.h>
#include <stdio.h>
#include <stdlib.h>
#define n 7
void main()
{
randomize();
clrscr();
int a[n];
int c=0;
printf ("\n ishodnyi massiv:");
for (int i=0; i<n;i++)
{
a[i]=random (10);
printf ("%5i",a[i]);
}
printf ("\nizmenenyi massiv\n");             // zapisat te kotorye vstrechautca 1 raz
for (i=0; i<n; i++)
{
 for (int j=0; j<n;j++)
 {
  if (a[i]==a[j]&& j!=i)
   c++;
   }
   if (!c)
   printf ("%5d ",a[i]);
   else
   c=0;
}
getch();
}
0
78 / 77 / 51
Регистрация: 30.03.2013
Сообщений: 194
29.01.2016, 20:24 9
Цитата Сообщение от pirat2k Посмотреть сообщение
спасибо, проблему решил так
Проблема решена ещё в 3 посте (хотя это не проблема).
Скажите а 18 строка у вас нормально компилируется?)
C
1
for (i=0; i<n; i++)//wtf i?
0
11 / 11 / 8
Регистрация: 18.09.2012
Сообщений: 514
30.01.2016, 23:52  [ТС] 10
Цитата Сообщение от aiwprton805 Посмотреть сообщение
Проблема решена ещё в 3 посте (хотя это не проблема).
Скажите а 18 строка у вас нормально компилируется?)
Да вроде все норм, главное что работает как надо
0
Модератор
Эксперт PythonЭксперт JavaЭксперт CЭксперт С++
12458 / 7482 / 1753
Регистрация: 25.07.2009
Сообщений: 13,762
01.02.2016, 04:14 11
Лучший ответ Сообщение было отмечено Памирыч как решение

Решение

C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
#include <stdio.h>
 
int * find(const int * array, const size_t count, const int value) {
    return ( ! count ) ? NULL : ( *array == value ) ? (int*)array : find(array + 1, count - 1, value);
}
 
#define COUNT (10)
 
int main(void) {
    int arr[COUNT] = { 2, 3, 4, 3, 7, 5, 6 , 5, 7, 8 }, i;
    
    for ( i = 0; i < COUNT; ++i )
        if ( find(arr, COUNT, arr[i]) == arr + i && find(arr + i + 1, COUNT - i - 1, arr[i]) == NULL )
            printf("%d ", arr[i]);
    printf("\n");
    
    return 0;
}
0
11 / 11 / 8
Регистрация: 18.09.2012
Сообщений: 514
23.02.2016, 10:51  [ТС] 12
извиняюсь, а как сделать к примеру так:
Исходный массив: 5 0 8 8 9 3
Измененный массив: 5 0 8 9 3
0
11 / 11 / 8
Регистрация: 18.09.2012
Сообщений: 514
23.02.2016, 12:40  [ТС] 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
#include <conio.h>
#include <stdio.h>
#include <stdlib.h>
#define n 7
void main()
{
randomize();
clrscr();
int a[n];
int c=0;
printf ("\n  Ёб室*л© ¬*ббЁў:");
for (int i=0; i<n;i++)
{
a[i]=random (10);
printf ("%5i",a[i]);
}
printf ("\nЁ§¬Ґ*Ґ**л© ¬*ббЁў:");            
for (i=0; i<n; i++)
{
 for (int j=0; j<n;j++)
 {
  if (a[i]==a[j]&& j!=i)
   c++;
   }
   if (c==1||!c)
   printf ("%5d ",a[i]);
   else
   c=0;
}
getch();
}
Миниатюры
Дописать или подправить алгоритм вывода неповторяющихся элементов в массиве   Дописать или подправить алгоритм вывода неповторяющихся элементов в массиве  
0
1287 / 880 / 254
Регистрация: 30.06.2015
Сообщений: 4,592
Записей в блоге: 51
23.02.2016, 12:57 14
pirat2k
По моему, в Си нет функции random
0
11 / 11 / 8
Регистрация: 18.09.2012
Сообщений: 514
23.02.2016, 13:18  [ТС] 15
Цитата Сообщение от CoderHuligan Посмотреть сообщение
По моему, в Си нет функции random
это Borland C++
0
1287 / 880 / 254
Регистрация: 30.06.2015
Сообщений: 4,592
Записей в блоге: 51
23.02.2016, 17:10 16
Цитата Сообщение от pirat2k Посмотреть сообщение
это Borland C++
Если мы находимся в ветке Си, а не Си++ то и нужно писать на Си, а не смешивать два языка, для того, чтобы избежать в дальнейшем многих проблемм. Просто не понятно как компилятор вообще это переваривает... Лично у меня не переваривает...

Добавлено через 1 час 42 минуты
Вот что получилось:
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
#include <stdio.h>
#include <stdlib.h>
 #include <conio.h>
#define n 9
int main(void)
{
    int i,j,c,d=0,a[n],b[n]={0};
for ( i = 0; i < n; i++){
        a[i] = rand()%10;
        printf ("%d ",a[i]);
        }
printf ("\n");
    c=0;
    b[0]=a[0];
for(i=1;i<=n;i++){
        
    for(j=0;j<=c;j++){
            if(a[i]==b[j]) d=1;
            
                }
        if(d==0){b[j]=a[i];c++;}
        d=0;
    }
    for(i=0;i<c;i++)printf("%d",b[i]);
    printf ("\n");
    
        return 0;
}
Добавлено через 1 час 41 минуту
По просьбе, прокомментирую:
Идея такая - в первом массиве(массив a) исходная последовательность, а во втором(массив b) накапливается
результат
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>
#define n 9
int main(void)
{
/* i,j - счётчики циклов; с - счётчик количества элементов массива b; 
d -  флаг наличия равных элементов в массивах a и b; b[] - массив где формируется результат
в виде неодинаковых элементов массива a[] */
* * int i,j,c,d=0,a[n],b[n]={0}; 
/* инициализация массива a псевдослучайными числами */
for ( i = 0; i < n; i++){
* * * * a[i] = rand()%10;
* * * * printf ("%d ",a[i]);
* * * * }
/*Переходим на другую строку))*/
printf ("\n");
/*обнуляем счётчик равных элементов*/
* * c=0;
/*Первоначально присваеваем первому элементу массива b первый 
элемент  a (чтобы было с чем сравнивать последующие)*/
* * b[0]=a[0];
for(i=1;i<=n;i++){// первый цикл проходит по массиву a
for(j=0;j<=c;j++){ /*во втором цикле(внутри первого) сравниваем уже накопленные элементы в b с текущим элементом массива a */
* * * * * * if(a[i]==b[j]) d=1;// если эти элементы равны, то устанавливаем флаг
}
* * * * if(d==0){b[j]=a[i];c++;}/*если флаг не установлен, присваиваем массиву b значение  массива a;
счётчик c увеличиваем на единицу(счётчик c нужен чтобы не делать лишние пробеги во втором цикле
что может привести к ошибкам) */
* * * * d=0;// и сбрасываем флаг обратно, переходя к следующему элементу массива a
* * }
* * for(i=0;i<c;i++)printf("%d",b[i]);// выводим результат накопленный в массиве b
* * printf ("\n");
return 0;
}
1
23.02.2016, 17:10
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
23.02.2016, 17:10
Помогаю со студенческими работами здесь

Сформировать массив C из неповторяющихся элементов массива A, которых нет в массиве B
Помогите: Даны два одномерных массива А и В. Сформировать из них массив С, который содержит...

Опишите на русском языке или на одном из языков программирования алгоритм подсчёта среднего значения отрицательных элементов в целочисленном массиве д
Опишите на русском языке или на одном из языков программирования алгоритм подсчёта среднего...

Алгоритм расчёта суммы и произведения элементов в одномерном массиве и двумерном массиве и его модификация
алгоритм расчёта суммы и произведения элементов в одномерном массиве и двумерном массиве и его...

Алгоритм вывода свойства border-bottom у элементов
Здравствуйте. Подскажите, кто может. Имеется страница с выводом анонсов событий. Выводятся они в...


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

Или воспользуйтесь поиском по форуму:
16
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru