@sitrof

Что исправить в коде чтобы код решал задачу правильно?

Программа сперва генерирует 10 случайных чисел от 1 до 10, а далее считает сколько разных чисел повторяются.
Например, {1, 1, 1, 3, 4, 4, 2, 8, 7, 9}, в массиве повторяются числа (1 и 4), после чего в переменную вносится это количество (2).

Проблема в том, что если число будет повторяться один раз, то в переменную всё запишется правильно: {1, 1, 6, 3, 4, 4, 2, 8, 7, 9} - повторяется один раз цифра 1 и 4, значит x = ++x; И в консоли x = 2.
Но если, {1, 1, 1, 3, 4, 5, 2, 8, 7, 9} - цифра 1 повторяется трижды, x не будет равняться 1, будет выведен результат х = 3. То есть, программа подсчитала количество того, сколько раз цифра 1 выводилась.

srand(time(NULL));
int numbers[10]{};
    int count = 0, countnumb = 10;

    for (int i = 0; i < 10; i++)
    {
        numbers[i] = 1 + rand() % 10;
        cout << numbers[i] << endl;
    }
    for (int j = 0; j < 10; j++) {
        for (int k = 0; k < j; k++)
            if (numbers[j] == numbers[k] && j != k)
            {
                count = ++count; 
            }
    }
    countnumb = countnumb - count;
    cout << "Количество повторяющихся чисел: " << count << endl << "Количество чисел: " << countnumb;


В общем, при раскладе {1, 1, 1, 3, 4, 4, 2, 8, 7, 9} переменная должна выводить не цифру 4, а 2.
  • Вопрос задан
  • 145 просмотров
Решения вопроса 1
@WAR_VIK
Думаю, что самый простой и быстрый алгоритм будет такой:
Создать массив с числами от 1 до 10 и в двойном цикле сравнить цифры этого массива с Вашим массивом. Если совпадений больше 1, то считать это в результате. Примерно вот так:
#include <iostream>

int main() {
int arr[]{1,1,1,3,4,4,2,8,7,9};
int sample[]{1,2,3,4,5,6,7,8,9,10};
int count{0}, res{0};
for(int& i : sample) {
  for(int& j : arr) {
    if(i == j) ++count;
  }
  if(count > 1) ++res;
  count = 0;
}
std::cout << res;
return 0;


Или применить этот алгоритм с помощью std::set:
#include <iostream>
#include <set>

int main() {
int arr[]{1,1,1,3,4,4,2,8,7,9};
std::set<int> set;
for(int i : arr) set.insert(i);
int count{0}, res{0};
for(int el : set) {
  for(int j : arr) {
    if(el == j) ++count;
  }
  if(count > 1) ++res;
  count = 0;
}
std::cout << res;
return 0;
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы