Buenas compañeros, he estado rompiéndome la cabeza

es un pequeño ejercicio pareciera muy simple pero al final fue mas de lo que pensé, supongan que tienen un conjunto (dado por el usuario) que consta de 1 hasta n(dato del usuario), la serie va aumentando de uno en uno, y cuando llega al tope de la serie a esta se le "eliminan" los últimos 2 elementos y se le aumenta uno al elemento anterior al tope de la serie así hasta que el primer numero llegue a ser el tope. les adjunto una imagen de ejemplo de como sería si el tope o conjunto fuera 5 ojalá me explique y puedan ayudarme.
#include <iostream>
#include <conio.h>
#include <stdlib.h>
#include <stdio.h>
using namespace std;
main ()
{
int n,j=0,k=0,l=1;
cout << "Ingresa el ultimo numero del conjunto: ";
cin >> n;
int a[n],o[n];
for (int i=0;i<n;i++)
{
a[i]=i+1;
}
while (a[0]!=n+1)
{
for (k=0;k<l;k++)
{
if (a[k]==n)
{
cout << a[k];
l-=2;
a[k-1]+=1;
a[k]=a[k-1];
}
else if (a[k]<n)
{
cout << a[k];
}
}
if (l<n)
{
l++;
}
cout << endl;
}
}
Como ven CASI logro hacerla pero me salen números de más.

