Informatică, întrebare adresată de BogdanPricop, 9 ani în urmă

Cerința
Se dă un vector cu n elemente, numere naturale nenule. Afișați termenii în ordine crescătoare.

Termenii care apar de mai multe ori se vor afișa o singură dată.

Date de intrare
Programul citește de la tastatură numărul n, iar apoi n numere naturale nenule, separate prin spații.

Date de ieșire
Programul afișează elementele vectorului, în ordine crescătoare, separate prin spații, respectând cerința cerută.

Restricții și precizări
1 ≤ n ≤ 1.000.000
cele n numere citite vor fi mai mici sau egale cu 300.000
Atenție la limita de memorie!

Exemplu
Intrare

7
9 8 8 8 1 2 8
Ieșire

1 2 8 9
Explicație
Elementele distincte care apar in vectorul inițial sunt: 9, 8, 1, 2

După sortare, vectorul se va reprezenta ca: 1, 2, 8, 9

Problema este ca limita de timp este de 0.65 secunde si cea de memorie de 0.1 MB/ 0.1 MB


JolieJulie: eu nu cred... doar il citesc pe n si imi ia 1.813 s.Nu are cum sa fie limita de 0.65 s

Răspunsuri la întrebare

Răspuns de uleiaalex
1
Scuze dar am rezolvat problema in C#. Sper ca te-am ajutat.
using System;
namespace TermeniCrescatori
{
    class Program
    {
        static int minim(int[] v, ref int poz, int startPoz,int lenV)
        {
            int min = v[startPoz];
            for (int i = startPoz + 1; i <= lenV - 1; i++)
            {
                if (v[i] <min)
                {
                    min = v[i];
                    poz = i;
                }
            }
            return min;
        }
        static void Main(string[] args)
        {
            int n = int.Parse(Console.ReadLine());
            int[] v = new int[0];
            for (int i = 0; i < n; i++)
            {
                Console.Write("v[{0}]",i);
                int nr = int.Parse(Console.ReadLine());
                bool ok = false;
                for (int j = 0; (j < v.Length) && !ok; j++)
                {
                    if (nr == v[j])
                        ok = true;
                }
                if (!ok)
                {
                    Array.Resize(ref v, v.Length+1);
                    v[v.Length-1] = nr;
                }
            }
            int poz = 0;
            for (int i = 0; i < v.Length; i++)
            {
                int mini = minim(v, ref poz, i,v.Length);
                Console.WriteLine(mini + " pe pozitia " + poz); //Debug
                if (v[i] > mini)
                {
                    int t = v[i];
                    v[i] = mini;
                    v[poz] = t;
                }
            } 
           Console.WriteLine();
           Console.WriteLine("Vectorul sortat cu insertion este: ");

           for (int i = 0; i < v.Length; i++)
           {
                Console.Write(v[i] + " ");
           }
            Console.WriteLine();
            Console.ReadKey();
        }
    }
}
Alte întrebări interesante