Serie de numeros "compleja"

Iniciado por Gunhack, 5 Abril 2015, 03:19 AM

0 Miembros y 1 Visitante están viendo este tema.

Gunhack

Buenas compañeros, he estado rompiéndome la cabeza  :-X 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.  :-\


crack81

Te dejo mi version en ella utilizo vectores que para mi es la forma mas sencilla de resolver el problema saludos

Código (cpp) [Seleccionar]
#include<iostream>
#include<vector>
using namespace std;

int main(){

    vector<int> lista;
    int n;
    cout<<"Ingrese el valor maximo"<<endl;
    cin>>n;



    for(int i=1;i<=n;i++){
        lista.push_back(i);

        //cout<<lista.size()<<endl;
        for(int j=0;j<lista.size();j++){
            cout<<lista[j]<<" ";
        }
        cout<<endl;

    }

    while(lista[0]!=n){

        if(lista.back()==n){

            lista.pop_back();
            lista[lista.size()-1]++;
        }
        else{

            lista.push_back(lista.back()+1);
        }

        for(int i=0;i<lista.size();i++){

            cout<<lista[i]<<" ";
        }
        cout<<endl;

    }

cin.get();
cin.get();
return 0;}


Si C/C++ es el padre de los lenguajes entonces ASM es dios.

Gunhack

Cita de: crack81 en  5 Abril 2015, 05:14 AM
Te dejo mi version en ella utilizo vectores que para mi es la forma mas sencilla de resolver el problema saludos


Hombre muchisimas gracias! debo decir que no sabía nada sobre vectores (de esa forma), investigue un poco y me ayudo mucho a resolver el problema con arreglos simples dejo el código por si alguien gusta analizarlo.

Código (cpp) [Seleccionar]

#include <iostream>
#include <conio.h>
#include <stdlib.h>
#include <stdio.h>

using namespace std;

main ()
{
    int n,l=0;
    cout << "Ingresa el ultimo numero del conjunto: ";
    cin >> n;
    int a[n];
    l=n-1;

    for (int i=0;i<n;i++)
    {
        a[i]=i+1;
        for (int t=0; t<=i; t++)
        {
            cout<<a[t];
        }
        cout<<endl;
    }

    while (a[0]!=n)
    {
        if (a[l]==n)
        {
            l-=1;
            a[l]++;
        }
        else
        {
            l+=1;
            a[l]=a[l-1]+1;
        }

        for(int i=0;i<=l;i++)
        {
            cout<<a[i];
        }

        cout<<endl;
    }
    getch();
    return 0;
}