Найти количество повторяющихся элементов массива и заменить первый элемент на полученное значение

программирование с++ программирование на c++

Найти количество повторяющихся элементов массива и заменить первый элемент на полученное значение.
Например, 2 7 3 7 1 – 1 7 3 7 1, т.е. допустим повторяются число 1 в массиве 3 раза, но пофторяется цифра то только одна! значит первой число заменяем на 1, если 1 1 2 2 3 , то 1 число будет 2. Я сделал, но у меня ерунда получается, ибо у меня проверяет сколько всего йифра повторяется. ПОМОГИТЕ ПОЖАЛУЙСТА, ЖЕЛАТЕЛЬНО КАК МОЖНО ПРОЩЕ ОБЪЯСНИТЕ И РАССКАЖИТЕ АЛГОРИТМ, ах да ещё, это нужно сделать на C++
Вот мой код:
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
int main(){
const int n=5;
int a[n];
int c, k;
int kol=0;
srand(time(0));
printf("\n Randomnyj massiv(n=5): \n\n");
for(int i=0;i<n;i++)
{
/*a[i]=rand()%10;
printf("%d ", a[i]);*/
scanf("%d", &a[i]);
}
printf("Ishodnyj massiv:\n");
for(int i=0;i<n;i++){
printf("%d ",a[i]);
}
printf("\n\n");
printf("\n\n Novyj massiv : \n");
/*Подсчёт:*/

for(int i=0;i<=n;i++)
{
for(int j=i;j<=n;j++)
{
if(a[j]==a[j+1])
{

kol++;

}
}
}

//Выводим замену:
printf("\n");
printf("%d ", kol);
for(int j=1;j<n;j++){
printf("%d ",a[j]);
}
return 0;
}
Ответы:
Как я могу понять, с map/dictionary/hashtable не знаком?
Если знаком то очень хорошо, ибо:
заводим два мапа - position & count
затем в цикле бежим по массиву array
{
  встретили элемент x:
    если x есть в count, тогда count[x]+=1
    иначе  
     {
        position[x]=<позиция где мы встретили x>
        count[x]=1
     }
}
теперь перибераем все ключи из мапа position
{
 //пусть текущий ключ K
 array[position[K]]=count[K]
}
всё
--------------
Если мапы не знаешь - тогда иммулируй их с помощью списков. если их не знаешь - с помощью массивов


15 лет назад

RPI.su - самая большая русскоязычная база вопросов и ответов. Наш проект был реализован как продолжение популярного сервиса otvety.google.ru, который был закрыт и удален 30 апреля 2015 года. Мы решили воскресить полезный сервис Ответы Гугл, чтобы любой человек смог публично узнать ответ на свой вопрос у интернет сообщества.

Все вопросы, добавленные на сайт ответов Google, мы скопировали и сохранили здесь. Имена старых пользователей также отображены в том виде, в котором они существовали ранее. Только нужно заново пройти регистрацию, чтобы иметь возможность задавать вопросы, или отвечать другим.

Чтобы связаться с нами по любому вопросу О САЙТЕ (реклама, сотрудничество, отзыв о сервисе), пишите на почту [email protected]. Только все общие вопросы размещайте на сайте, на них ответ по почте не предоставляется.