Не могу найти свою ошибку

Нашёл в инете интересное задание:
Имеется массив из n чисел. Вывести всё числа, встречающиеся более одного раза.
Пример:
Вход:
6
2 4 6 3 2 2 6

Выход:
2 6

Пишу программу:


#include <iostream>

using namespace std;

bool found( int *ptr, int var, int n1, int n2 ) // функция,  которая ищет число(var) в заданном промежутке от n1 до n2   в массиве *ptr
{
     for ( int i = n1; i < n2; i++ )
     {
         if ( *ptr++ == var ) return true;
     }
    return false;
}

int main()
{
    int n;
    cin >> n;
    int *mass = new int[n];
    for ( int i = 0; i < n; i++ )
    {
        cin >> mass[i];
    }
    for ( int i = 0; i < n; i++ )
    {
        if ( !found ( mass, mass[i], 0, i ) && found ( mass, mass[i], i+1, n ) ) // если не нашли в промежутке от 0 до i и нашли в промежутке от i до n
        {
            cout << mass[i] << " ";
        }
    }
    delete []mass;
    return 0;
}


но выводит:
2 4 6 ( для примера выше )
не могу найти свою ошибку. помогите, пожалуйста.

#include "stdafx.h"
#include <iostream>
#include <conio.h>

using namespace std;

bool found( int *ptr, int var, int n1, int n2 ) //    функция,  которая ищет число(var) в заданном промежутке от n1 до n2   в массиве *ptr
{
   for ( int i = n1; i < n2; i++ )
   {
      if ( *ptr++ == var ) return true;
   }
return false;
}




 int main()
{
    int n;
    cin >> n;
    int *mass = new int[n];

    for ( int i = 0; i < n; i++ )
    {
        cin >> mass[i];
    }

    for ( int i = 0; i < n; i++ )
    {
        if ( found ( mass, mass[i], 0, i ))
        {
             cout << mass[i] << " ";
        }
    }

     delete []mass;
    _getch();
    return 0;
}

Так должно получиться.

Наверное потому что размер массива указывается 6, а на вход идет 7 цифр: 2, 4, 6, 3, 2, 2, 6. У меня все работает, разве что есть минус: 2, 4, 6, 3, 2, 2, 6, должен вывести: 2, 6, а выводит 2, 2, 6.

Так работает:

#include <iostream>

using namespace std;

struct NumQty {
    int num;  // число
    int qty;  // количество вхождений числа
};

int main() {

    int all_nums;
    cin >> all_nums;

    NumQty *ary = new NumQty[all_nums];
    int cur_num;      // текущее число
    int counter = 0;  // счётчик уникальных чисел
    bool found;       // флаг, что число уже встречалось
    for (int i = 0; i < all_nums; i++) {
        cin >> cur_num;
        found = false;
        for (int j = 0; j <= i; j++) {
            // поиск введённого числа в массиве стуктур
            if (cur_num == ary[j].num) {
                // число найдено
                ary[j].qty++;  // увеличить счётчик
                found = true;  // число уже встречалось
                // cout << "found " << cur_num << endl;
            }
        }
        if (!found) {
            // число уникально
            ary[counter].num = cur_num;  // запомнить число
            ary[counter].qty = 0;        // инициализировть счётчик вхождений
            counter++;  // увеличить счётчик уникальных чисел
            // cout << "added " << cur_num << endl;
        }
    }

    // вывод результата
    for (int i = 0; i < counter; i++) {
        // если число встречается один раз, то счётчик вхождений равен 0 - число не выводится
        if (ary[i].qty) {
            cout << ary[i].num << ' ';
        }
    }

    delete [] ary;

    return 0;
}

На ассоциативных массивах, наверное, код будет проще.

Даны два массива: А(n), из n различных чисел и В(m), из m различных чисел.
Получить новый массив, который cодержит те элементы из массива A, модулей которых нет в B

#include <iostream>
#include <math.h>
using namespace std;

int main()
{
    int a [20], b [20], c [20],i,j,k,n,m;
    cout << "BBeguTe KoJIu4ecTBo eJIeMeHTob MaccuBa a, n=";
    cin >>n;
    cout << "BBeguTe KoJIu4ecTBo eJIeMeHTob MaccuBa b, m=";
    cin >>m;
    for (i=0; i<n; i++)
         cin >>a[i];
    for (j=0; j<m; j++)
         cin >>b[j];
    k=0;
    for (i=0; i<n; i++)
    {
      for (j=0; j<m; j++)
        {
         if (fabs(a[i])!=fabs(b[j]))
            {
             c[k]=a[i];
             k++;
            }
        }
    }
    if (k=0)
       cout <<"He Hau'geHo";
    else
    {
       for (k=0; k<n; k++)
       cout << c[k]<< " ";
    }
    return 0;
}

не могу найти ошибку свою

Так вроде работает:

#include <iostream>
#include <math.h>
using namespace std;

int main() {
    int a [20], b [20], c [20],i,j,k,n,m;
    cout << "BBeguTe KoJIu4ecTBo eJIeMeHTob MaccuBa a, n=";
    cin >>n;
    cout << "BBeguTe KoJIu4ecTBo eJIeMeHTob MaccuBa b, m=";
    cin >>m;

    for (i=0; i<n; i++)
        cin >> a[i];
    cout << endl;
    for (j=0; j<m; j++)
        cin >> b[j];

    k=0;
    bool found;
    for (i=0; i<n; i++)
    {
        found = false;  
        for (j=0; j<m; j++)
        {
            if (found = fabs(a[i]) == fabs(b[j]))
                break;
        }
        if (!found) {
            c[k++] = a[i];
        }
    }
    if (k == 0)
        cout <<"He Hau'geHo";
    else
    {
        for (i=0; i<k; i++)
            cout << c[i]<< " ";
    }
    return 0;
}

Ребят, подскажите, как правильно оформить третий «if»?

int _tmain(int argc, _TCHAR* argv[])
{
    setlocale (LC_ALL, "RUS");
    int a;
    double c, f, fc, ff;
    cout << "Выберете метод перевода, нужный Вам\n\n 1. Из градусов цельсия в фаренгейты\n\n 2. Из градусов фаренгейта в цельсия\n\n";
    cin >> a;
    if (a==1)
    {
        cout << "Вы выбрали метод перевода из градусов цельсия в фаренгейты\n\n";
    }
    if(a==2)
    {
        cout << "Вы выбрали метод перевода из градусов фаренгейта в цельсия\n\n";

    }

    if (a!=1, a!=2)
    {
        cout << "Запустите программу заново и введите номер метода, котрый Вам нужен!\n\n";
    }
if (a != 1 && a != 2)
{
    cout << "Запустите программу заново и введите номер метода, котрый Вам нужен!\n\n";
}

Но лучше убрать все if'ы вообще:

switch (a) {
case 1: // Цельсий -> Фаренгейт
    ...
    break;

case 2: // Фаренгейт -> Цельсий
    ...
    break;

default:
    cout << "Запустите программу заново и введите номер метода, котрый Вам нужен!\n\n";
}

Внимание! Это довольно старый топик, посты в него не попадут в новые, и их никто не увидит. Пишите пост, если хотите просто дополнить топик, а чтобы задать новый вопрос — начните новый.

Ответить

Вы можете использовать разметку markdown для оформления комментариев и постов. Используйте функцию предпросмотра для проверки корректности разметки.

Пожалуйста, оформляйте исходный код в соответствии с правилами разметки. Для того, чтобы вставить код в комментарий, скопируйте его в текстовое поле ниже, после чего выделите то, что скопировали и нажмите кнопку «код» в панели инструментов. Иначе ваш код может принять нечитаемый вид.

Либо производите оформление кода вручную, следующим образом:

``` #include <iostream> using namespace std; int main() { // ... } ```

Предпросмотр сообщения

Ваше сообщение пусто.