- 70
- 2
- CPU
- intel core i5-2310m
- HDD
- 1TB Western digital 5400rpm
- RAM
- 8gb ddr3
- GPU
- amd ati 7310m
- Monitor
- samsung E2220
- OS
- Windows 7; ubuntu 14.04; Kali linux; debian 7
Per esercitarci nella programmazione in universita usiamo una piattaforma di test automatica, in pratica inseriamo il codice scritto e il sito ci indica se il programma funziona o meno.
Ora, io ho questo esercizio:
Ho scritto questo codice:
Mi da questo risultato:
Personalmente il codice mi sembra abbastanza banale e non vedo dove/come poterlo migliorare.
Aiuti, suggerimenti?
Ora, io ho questo esercizio:
Scrivere un programma C++ che, letta da input una sequenza di numeri
terminata da -1 e che può contenere al massimo 100, la memorizziopportunamente in un array,
individui tutti gli interiche compaiono più di unavolta e cancelli tutti i
duplicati(lasciando cioè solo la prima occorrenza di ogni numero); l’array dove essere inoltre compattato,
ossia devono essere eliminati i “buchi” che si creano dopo le cancellazioni,spostando a sinistra i valori
rimanenti.
Stampare poi su standard ouptut l’array così modificato.ESEMPIO: data la sequenza
2| 2| 3 |4 |5 |6| 4|-23 |8| -23| -23|-1
Il programma dovrebbe quindi stampare
2 |3 |4 |5| 6| -23| 8
.
terminata da -1 e che può contenere al massimo 100, la memorizziopportunamente in un array,
individui tutti gli interiche compaiono più di unavolta e cancelli tutti i
duplicati(lasciando cioè solo la prima occorrenza di ogni numero); l’array dove essere inoltre compattato,
ossia devono essere eliminati i “buchi” che si creano dopo le cancellazioni,spostando a sinistra i valori
rimanenti.
Stampare poi su standard ouptut l’array così modificato.ESEMPIO: data la sequenza
2| 2| 3 |4 |5 |6| 4|-23 |8| -23| -23|-1
Il programma dovrebbe quindi stampare
2 |3 |4 |5| 6| -23| 8
.
Ho scritto questo codice:
Codice:
#include <iostream>
using namespace std;
const unsigned dim=100;
bool presente(int B[], unsigned size, int num)
{
for(unsigned r=0; r<size; r++)
if(B[r]==num)
return true;
return false;
}
void leggi (int B[], unsigned &size)
{
int n;
cin>>n;
while(n!=-1 && size<dim)
{
if(!presente(B, size, n))
{
B[size]=n;
size++;
}
cin>>n;
}
}
void stampa(int B[], unsigned size)
{
for(unsigned j=0; j<size; j++)
cout<<B[j]<<" ";
}
int main()
{
int A[dim];
unsigned size=0;
leggi(A, size);
stampa(A, size);
return 0;
}
Mi da questo risultato:
TIME LIMIT Il programma è stato compilato con successo ma una volta eseguito non ha completato l'elaborazione entro il tempo limite fissato.Prova a verificare che non ci siano cicli infiniti e prova ad ottimizzarel'algoritmo.
Personalmente il codice mi sembra abbastanza banale e non vedo dove/come poterlo migliorare.
Aiuti, suggerimenti?