Компьютерный форум OSzone.net  

Компьютерный форум OSzone.net (http://forum.oszone.net/index.php)
-   Программирование и базы данных (http://forum.oszone.net/forumdisplay.php?f=21)
-   -   Необходимо одно изменение в задаче массива array99 Абрамяна (http://forum.oszone.net/showthread.php?t=311302)

alert30 08-02-2016 11:29 2603643

Необходимо одно изменение в задаче массива array99 Абрамяна
 
Вот сама задача: "Дан целочисленный массив размера N. Удалить из массива все элементы, встречающиеся более двух раз, и вывести размер полученного массива и его содержимое."

Я решил, но получается так, что в программе выдает совсем иное.
В общем, нужно сделать так, чтобы эти одинаковые элементы, встречающиеся более 2 раз, удалил только один из них элемент и уменьшил общий размер массива на единицу. Например:
Код:

Ввожу на компе "a[0]=2, a[1]=2, a[2]=2, a[3]=4, a[4]=4, a[5]=4, a[6]=33, a[7]=44, a[8]=9, a[9]=18"
Должно быть при выводе:
"A[]: 2 2 4 4 33 44 9 18
Размер массива: 8"

Вот, собственно, код:
Код
Код:

#include <conio.h>
#include <cstdlib>
#include <iostream>
#include <memory.h>

using namespace std;
void in_a(int* a, int N);
void out_a(int* a, int N);

int main(int argc, char *argv[])
{
    system("color 0f");
    setlocale (0,"");
    int N;
    cout<<"Введите N (N<=10): ";
    cin>>N;
        int *a=new int[N];
        memset((void*)a, 0x00, sizeof(int)*N);
    int *a_T=new int [N];
    memset((void*)a_T, 0x00, sizeof(int)*N);
        if (N<=10){
                cout<<"Заполнение массива"<<endl;
                in_a(a,N);
                int T=0;
                for(int i=0;i<N;i++){
                int C=0;
                for(int j=0;j<N;j++) if (a[j]==a[i]) C++;
            if (C<=2) a_T[T++]=a[i];
                }
                a=a_T;
                cout<<"Ответ\na[]: ";
                out_a(a,N);
                cout<<"\nРазмер полученного массива: "<<T;
                }
                else cout<<"Ошибка";
                getch();
                }

void in_a(int* a, int N){
for(int T=0;T<N;T++){
cout<<"a["<<T<<"]=";
cin>>a[T];
}
}
 
void out_a(int* a, int n){
for (int T=0;a[T]!=0;T++) cout<<a[T]<<" ";
}


Iska 08-02-2016 11:45 2603653

Цитата:

Цитата alert30
В общем, нужно сделать так, чтобы эти одинаковые элементы, встречающиеся более 2 раз, к примеру, было таким (то есть чтобы при трехразового такого же элемента удалил только один из них элемент с массивом и уменьшил его целостный размер массива на единицу): »

Коллега, попробуйте придать больше смысла этому предложению.

Цитата:

Цитата alert30
Удалить из массива все элементы, встречающиеся более двух раз »

Подряд или в произвольном порядке?

alert30 10-02-2016 08:44 2604379

Цитата:

Цитата Iska
Коллега, попробуйте придать больше смысла этому предложению. »

Моего примера не хватает? Написал же.
UPD: Сократил до смысла.
Цитата:

Цитата Iska
Подряд или в произвольном порядке? »

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

lxa85 17-02-2016 18:27 2607153

alert30, Прошу прощения, если задену.
Но из набора букв решения я смысла не увидел.
Поэтому я предложу подумать о задаче не в терминах языка, а своими словами на бумаге.
Т.к. безыдейный код сложно проверять и искать в нем ошибку.

mrcnn 23-02-2016 06:25 2609139

Через 3 массива нужно, наверное, делать, так как самый пессимистичный вариант, если все N элементов массива разные. Второй массив - множество элементов, присутствующих в массиве, которое является подмножеством первого массива. Третий массив - количество каждого из типов элементов. Объем требуемой памяти получается 3*N. Второй массив в итоге будет искомым массивом после удаления. Решение нужно написать или уже не актуально?

alert30 30-03-2016 02:49 2621149

Спасибо всем, решение мне лично скинули давно.


Время: 07:19.

Время: 07:19.
© OSzone.net 2001-