Форум программистов, компьютерный форум, киберфорум
Наши страницы
С++ для начинающих
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.80/5: Рейтинг темы: голосов - 5, средняя оценка - 4.80
MILAN
888 / 782 / 186
Регистрация: 21.02.2009
Сообщений: 1,722
#1

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

24.01.2010, 16:22. Просмотров 827. Ответов 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
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
24.01.2010, 16:22
Ответы с готовыми решениями:

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

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

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

Даны две строки, сформировать третью из символов, которые встречаются более двух раз
Добрый день, помогите с задачей пожалуйста:) Даны две строки, сформировать...

дописать ( Из массива А удалить все элементы, которые встречаются в В ровно 2 раза. Из В переписать в С те элементы, которые совпадают с оставшимися)
нужно чтоб на экран еще выводило перед новым массивом А, числа,которые...

10
Day
1159 / 964 / 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
MILAN
888 / 782 / 186
Регистрация: 21.02.2009
Сообщений: 1,722
24.01.2010, 17:42  [ТС] #3
Тоже самое!!!! Когда ввожу 121212, надо чтоб програма вывела 000000, а она 101010???????

Добавлено через 58 минут
Может у кого есть мысли????
0
Genius Ignat
1241 / 779 / 108
Регистрация: 16.09.2009
Сообщений: 2,014
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
CyBOSSeR
Эксперт С++
2309 / 1682 / 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
1159 / 964 / 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
CyBOSSeR
Эксперт С++
2309 / 1682 / 148
Регистрация: 06.03.2009
Сообщений: 3,675
24.01.2010, 21:16 #7
Day, избегай использования дополнительных массивов при решении задач, в которых без них можно обойтись.
1
Day
1159 / 964 / 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
1159 / 964 / 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
24.01.2010, 23:54
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
24.01.2010, 23:54
Привет! Вот еще темы с ответами:

Найти и вывести на экран все элементы, которые которые повторяются более N/2 раз
#include &quot;stdafx.h&quot; #include &lt;iostream&gt; #include &lt;fstream&gt; using namespace...

Элементы массива, которые встречаются только один раз
Нужно создать функцию, которая выводит на экран номера элементов, встречающихся...

Все элементы вектора, которые встречаются более одного раза, переписать в другой вектор
Все элементы вектора V,которые встречаються более одного раза ,переписать в...


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

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

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2018, vBulletin Solutions, Inc.
Рейтинг@Mail.ru