Подход с использованием C может отличаться от подхода с использованием C ++, поскольку, например, в C ++ вы можете использовать стандартные контейнеры и алгоритмы, тогда как в C они отсутствуют.
Поэтому я покажу решение, которое может быть реализован на обоих языках.
Вот, пожалуйста. Программа написана с использованием C, но ее легко преобразовать в программу на C ++, подставив заголовок и один оператор: оператор вывода.
#include <stdio.h>
int main( void )
{
int a[] = { 10, 20, 20, 10, 10, 30, 50, 10, 20 };
const size_t N = sizeof( a ) / sizeof( *a );
size_t total = 0;
for ( size_t i = 1; i < N; i++ )
{
size_t count = 1;
for ( size_t j = 0; j < i; j++ )
{
if ( a[i] == a[j] ) ++count;
}
if ( count % 2 == 0 ) ++total;
}
printf( "The number of pairs of equal elements is %zu\n", total );
return 0;
}
Вывод программы:
The number of pairs of equal elements is 3
В C ++ вы можете использовать, например, следующий альтернативный подход с использованием стандартного контейнера std::map
или std::unordered_map
.
#include <iostream>
#include <map>
int main()
{
int a[] = { 10, 20, 20, 10, 10, 30, 50, 10, 20 };
size_t total = 0;
std::map<int, size_t> m;
for ( const auto &item : a ) ++m[item];
for ( const auto &item : m ) total += item.second / 2;
std::cout << "The number of pairs of equal elements is " << total << '\n';
return 0;
}
Вывод программы такой же, как показано выше.
The number of pairs of equal elements is 3