1

Тема: Допоможіть буть ласка написати код

Дано цілочисловий масив розміру N. Видалити з масиву всі елементи, що
зустрічаються більше двох разів, і вивести розмір отриманого масиву і його
вміст.

2

Re: Допоможіть буть ласка написати код

Який бюджет?

Прихований текст

http://s018.сайт-злодій/i504/1305/4e/128b3beefcef.jpg

3

Re: Допоможіть буть ласка написати код

#include <iostream>
#include <cstdlib>
#define SIZE 20

using namespace std;

int main(int argc, char **argv) {
    /* Cтворюємо початковий масив array 
     * і масив new_array для елементів, що повторюються */
    int array[SIZE], new_array[SIZE];
    /* i, j - лічильники */
    int i, j;
    /* flag - прапорець */
    int flag;
    /* found - кількість знайдених елементів */
    int found;
    
    /* Заповнюємо масив array випадковими числами,
     * а масив new_array - нулями */
    for (i = 0; i < SIZE; i++) {
        array[i] = rand() % 10;
        new_array[i] = 0;
    }
    
    /* Виводимо масив array */
    cout << "array:\n";
    for (i = 0; i < SIZE; i++) {
        cout << array[i] << ' ';
    }
    cout << '\n';
    
    /* Виводимо масив new_array */
    cout << "new_array:\n";
    for (i = 0; i < SIZE; i++) {
        cout << new_array[i] << ' ';
    }
    cout << '\n';
        
    /* Перебираємо кожен елемент початкового масиву */
    for (i = 0, found = 0; i < SIZE; i++) {        
        /* Рахуємо однакові елементи */
        for (j = 0, flag = 0; j < SIZE; j++) {
            /* Якщо елементи рівні і це не один і той самий елемент,
             * значить ми знайшли елемент, що повторюється */
            if (array[i] == array[j] && i != j) {
                flag++;
            }
        }
        
        /* Перевіряємо чи знайшли більше двох однакових елементів */
        if (flag >= 2) {
            /* Перевіряємо чи ми раніше не знаходили цей елемент */
            for (j = 0, flag = 0; j < found; j++) {
                /* Якщо знайшли два однакових елементи,
                 * то це значить що ми уже знаходили цей елемент */
                if (new_array[j] == array[i]) {
                    flag = 1;
                }
            }
            /* Якщо прапорець дорівнює нулю - то знайдений новий елемент */
            if (flag == 0) {
                /* Записуємо знайдений елемент в масив */
                new_array[found] = array[i];
                found++;
            }
        }        
    }
    
    /* Виводимо масив new_array */
    cout << "Знайдено " << found << " елемент(-а, -ів):\n";
    for (i = 0; i < found; i++) {
        cout << new_array[i] << ' ';
    }
    cout << '\n';
    
    return 0;
}

4 Востаннє редагувалося makhauser (17.06.2015 23:09:44)

Re: Допоможіть буть ласка написати код

Я знаю, що це не та мова, яка потрібна Вам, але осьо приклад, від якого можна відштовхнутися:

>>> a = [1, 2, 3, 3, 3, 2, 3, 42, 1, 1]
>>> a = [x for x in a if a.count(x) < 3]
>>> a, len(a)
([2, 2, 'a'], 3)

Можна ще коротше, але тоді взагалі декому може бути незрозуміло. Beautiful is better than ugly. Explicit is better than implicit.Simple is better than complex. Complex is better than complicated. Спробуйте щось подібне на плюсах

5

Re: Допоможіть буть ласка написати код

makhauser написав:

Спробуйте щось подібне на плюсах

Challenge accepted

Прихований текст
#include <iostream>
#include <algorithm>
#include <vector>
using namespace std;

int main() {
    vector<int> arr = {1, 2, 3, 3, 3, 2, 3, 42, 1, 1}, tmp;
    for( int x : arr ){
        if( count_if( arr.begin(), arr.end(), [&x](int y){return x==y;} ) <= 2 ) {
            tmp.push_back(x) ;
        }
    }
    arr = tmp;
    for( int x : arr ) {
        cout << x << endl;    
    }
    cout << arr.size();
    
    return 0;
}

6

Re: Допоможіть буть ласка написати код

Всім дякую