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
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();
}
}
}
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
Matematică,
8 ani în urmă
Geografie,
8 ani în urmă
Limba rusă,
8 ani în urmă
Matematică,
9 ani în urmă
Matematică,
9 ani în urmă
Limba română,
9 ani în urmă
Biologie,
9 ani în urmă