899 / 793 / 186
Регистрация: 21.02.2009
Сообщений: 1,722
1

Обнулить все элементы массива, которые встречаются более двух раз

24.01.2010, 16:22. Показов 2147. Ответов 10
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Есть масив розмером n. Обнулить все елементы масива , что встречаются более 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
50
51
#include <stdio.h>
#include <conio.h>
#include <math.h>
#include <iostream.h>
 
void poisk()
 { int nz,a[100],b[100],k=0;
   printf("Enter n: ");
   scanf("%d",&nz);
   printf("\nEnter element:\n\n");
   for (int i=1;i<=nz;i++)
    {
     cout<<"a["<<i<<"]=";
     cin>>a[i];
    }
   for (int zag=1;zag<=nz;zag++)
    {
     int k=0;
     int el=0;
     for ( el=0;el<=nz;el++)
       {
     if (a[zag]==a[el+1])
       {
         k++;
       }
     if (k>2)
      {
        for (i=0;i<=nz;i++)
         {
          if (a[i]==a[zag])
          {b[i]=0;}
          else
          b[i]=a[i];
         }
      }
 
       }
     //cout<<"ke="<<k<<"---\n\n";
 
    }
    for(i=1;i<=nz;i++)
      {
    cout<<"b["<<i<<"]="<<b[i]<<"\n";
      }
 }
main()
{clrscr();
 
  poisk();
  getch();
}
Програма обнуляет только елементы, которые встречаются первый раз?????????
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
24.01.2010, 16:22
Ответы с готовыми решениями:

Найти все символы, которые встречаются в строке более двух раз
Парни помогите нужно написать в C++ Builder &quot;Найти все символы, которые встречаются в строке более...

Найти все элементы массива, которые встречаются в нем не более одного раза
Нужна помощь. Задание такого : в двумерном массиве А найти все элементы, которые встречаются в нем...

Обнулить элементы, повторяющиеся более двух раз
Приветствую всех. Возникла проблема с обнулением в массиве элементов, которые повторяются более...

Удалить из массива все элементы встречающиеся более двух раз
Дано целочисленный массив размера N. Удалить из массива все элементы, встречаются более двух раз ,...

10
Day
1178 / 988 / 83
Регистрация: 29.10.2009
Сообщений: 1,385
24.01.2010, 16:36 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
 #include <stdio.h>
#include <conio.h>
#include <math.h>
#include <iostream.h>
 
void poisk()
 { int nz,a[100],b[100],k, x;
   printf("Enter n: ");
   scanf("%d",&nz);
   printf("\nEnter element:\n\n");
   for (int i=1;i<=nz;i++)
    {
     cout<<"a["<<i<<"]=";
     cin>>a[i];
    }
   for (int zag=1;zag<=nz;zag++) {
     int k=0;
     int el=0;
     for ( el=0;el<=nz;el++)
         if (a[zag]==a[el+1]) k++;
     if (k>2)
          {
            x = a[zag];  
            for (i=1;i<=nz;i++)
             {
              if (a[i]==x)
                 b[i]=0;
              else
                 b[i]=a[i];
             }
          }
 
      //cout<<"ke="<<k<<"---\n\n";
 
    }
    for(i=1;i<=nz;i++)
      {
        cout<<"b["<<i<<"]="<<b[i]<<"\n";
      }
 }
main()
{clrscr();
 
  poisk();
  getch();
}
0
899 / 793 / 186
Регистрация: 21.02.2009
Сообщений: 1,722
24.01.2010, 17:42  [ТС] 3
Тоже самое!!!! Когда ввожу 121212, надо чтоб програма вывела 000000, а она 101010???????

Добавлено через 58 минут
Может у кого есть мысли????
0
1260 / 798 / 108
Регистрация: 16.09.2009
Сообщений: 2,010
24.01.2010, 18:05 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
#include <iostream.h>
void main(){
        int mas[10] = {1,2,2,3,3,5,6,7,7,9};
 
        int tmp=mas[0];  
        for (int i=1; i<10; i++)  
        {
                if(mas[i]!=tmp)                        
                {
                        for (int j=i+1; j<10; j++)            
                            if(mas[i]==mas[j]){           
                                           
                            mas[i]=0;
                            mas[j]=0;
                            }
                       
                }
        }
 
 
for(int j=0;j<10;j++)cout<<mas[j];
 
 
 
}
1
Эксперт С++
2347 / 1720 / 148
Регистрация: 06.03.2009
Сообщений: 3,675
24.01.2010, 19:05 5
MILAN, первое что пришло в голову
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
#include <iostream>
#include <assert.h>
 
void Replace(int* arr, int size)
{
  assert(arr);
 
  for(int i = 0; i < size; ++i){
    if(arr[i] == 0)
      continue;
 
    bool is_find = false;
 
    for(int j = i + 1; j < size; ++j)
      if(arr[j] == arr[i]){
        arr[j]  = 0;
        is_find = true; 
      }
 
    if(is_find)
      arr[i] = 0;
  }
}
 
int main()
{
  int       arr[] = {1, 2, 1, 2, 1, 2};
  const int size  = sizeof(arr) / sizeof(arr[0]);
 
  Replace(arr, size);
 
  for(int i = 0; i < size; ++i)
    std::cout << arr[i] << " ";
 
  system("pause");
 
  return 0;
}
Проверял - работает как надо.
2
Day
1178 / 988 / 83
Регистрация: 29.10.2009
Сообщений: 1,385
24.01.2010, 20:51 6
Основная ошибка была в "else b[i] = a[i]"
Надо сначала все 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
35
36
#include <stdio.h>
#include <conio.h>
#include <math.h>
#include <iostream.h>
 
void poisk()
 { int nz, a[100], b[100], k, x, i, el, zag;
   printf("Enter n: ");
   scanf("%d",&nz);
   printf("\nEnter element:\n\n");
   for (i=1;i<=nz;i++)    {
     printf("a[%d]=\n", i);
     scanf("%d", a+i);
     b[i] = a[i];
   }
   for (zag=1;zag<=nz;zag++) {
     k=0;
     for ( el=zag+1;el<=nz;el++) {
       if (a[el]==0) continue;
       if (a[zag]==a[el]) k++;
     }
     if (k>1)  {
            x = a[zag];
            for (i=1;i<=nz;i++)
              if (a[i]==x) b[i]=0;
     }
      //cout<<"ke="<<k<<"---\n\n";
   }
   for(i=1;i<=nz;i++)
        printf("b[%d]=%d\n", i, b[i]);
}
main()
{
  poisk();
  getch();
}
0
Эксперт С++
2347 / 1720 / 148
Регистрация: 06.03.2009
Сообщений: 3,675
24.01.2010, 21:16 7
Day, избегай использования дополнительных массивов при решении задач, в которых без них можно обойтись.
1
Day
1178 / 988 / 83
Регистрация: 29.10.2009
Сообщений: 1,385
24.01.2010, 21:48 8
CyBOSSeR, ты совершенно прав, но в данном случае я правил предложенный код
0
AnonymC
24.01.2010, 22:12
  #9

Не по теме:

Цитата Сообщение от Day Посмотреть сообщение
CyBOSSeR, ты совершенно прав, но в данном случае я правил предложенный код
он везде прав:)

0
Day
1178 / 988 / 83
Регистрация: 29.10.2009
Сообщений: 1,385
24.01.2010, 22:53 10
Виноват, ошибочка вышла
Вместо "if (k>1)" должно быть "if (k>=1)"

И потом это k вообще не нужно.
Как только нашли совпадение - break из цикла
и ежели el<=nz - делаем обнуление
1
CyBOSSeR
24.01.2010, 23:54     Обнулить все элементы массива, которые встречаются более двух раз
  #11

Не по теме:

Цитата Сообщение от МедведЪ Посмотреть сообщение

Не по теме:


он везде прав:)

Если бы это было так...

0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
24.01.2010, 23:54

Удалить элементы массива, которые встречаются более двух раз
Дан массив, состоящий из 12 двоичных чисел. Удалить элементы, кото- рые встречаются более двух раз.

Переписать в массив В те элементы массива А, которые встречаются в нем более двух раз в обратном порядке
Задан массив А. Переписать в массив В те элементы массива А, которые встречаются в нем более двух...

Удалить из массива все элементы, которые встречаются больше двух раз
Дан целочисленный массив размера N. Удалить из массива все элементы, которые встречаются больше...

Удалить из массива все элементы которые встречаются менее двух раз.
Дан целочисленный массив ,состоящий из n элементов. Удалить из массива все элементы которые...


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

Или воспользуйтесь поиском по форуму:
11
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2023, CyberForum.ru