Esercizi (semplici algoritmi)
CORDA – Informatica
A. Ferrari
Problema delle 12 monete
¤  Abbiamo 12 monete che sembrano identiche ma non lo
sono. Una di esse ha un peso diverso dalle altre ma non
sappiamo qual è e neppure se è più pesante o più
leggera delle altre.
¤  Dobbiamo scoprire qual è la moneta di peso diverso,
con 3 pesate comparative utilizzando una bilancia a due
piatti.
Algoritmo delle 12 monete
Esercizio 1
¤  Scrivere un programma che implementa l’algoritmo
presentato per risolvere il problema delle 12 monete
¤  Scrivere una seconda versione dell’algoritmo in cui si
pesano solamente 2 monete per volta
Esercizio 2
¤  Scrivere un programma in linguaggio C che stampi tutte
le permutazioni ottenibili combinando le 4 lettere ‘A’, ‘B’,
‘C’, ‘D’.
¤  Segue un possibile output atteso del programma.
ABCD BACD CABD DABC
ABDC BADC CADB DACB
ACBD BCAD CBAD DBAC
ACDB BCDA CBDA DBCA
ADBC BDAC CDAB DCAB
ADCB BDCA CDBA DCBA
Esercizio da Olimpiadi Informatica
(Lo struzzo Simone)
¤  Lo struzzo Simone si sposta solo nelle direzioni dei quattro assi
cardinali (Nord, Sud, Est, Ovest). Ogni suo passo misura 1 metro.
Dovete scrivere un programma che, data una sequenza di
spostamenti di Simone, misuri quant'è la distanza fra il punto di
partenza e il punto di arrivo
¤  Dati di input
¤  Il file input.txt contiene la sequenza degli spostamenti. Tale file è
costituito da un'unica riga di testo, contenente una sequenza di S, N, E,
O (che indicano gli spostamenti nelle direzioni Sud, Nord, Est, Ovest
rispettivamente). La sequenza è terminata da un *. Ad esempio, il file di
input NNESO* dice che Simone si sposta di due metri a Nord, poi di un
metro verso Est, poi di un metro verso Sud, e quindi di un metro a Ovest.
¤  Dati di output
¤  Il file output.txt deve contenere un'unica riga. Su questa riga dovrà
comparire il numero intero corrispondente al quadrato della distanza.
Lo struzzo Simone (2)
File input.txt
File output.txt
NNSEEESNOENNS*
13
NNESOS*
0
OSOS*
4
Assunzioni
•  Il numero complessivo di spostamenti contenuti nel file di
input è minore o uguale a 100000.
•  L'esecuzione del programma deve terminare entro 5 secondi.
Input output
#include <stdio.h>
int main() {
FILE *fin = fopen("input.txt", "r");
FILE *fout = fopen("output.txt", "w");
char input[100000];
fscanf(fin, "%s", input);
while (input[i] != '*') {
}
}
fprintf(fout, "%d", ….);
fclose(fin);
fclose(fout);
return 0;
Lo struzzo Simone (3)
#include <stdio.h>
int main() {
FILE *fin = fopen("input.txt", "r");
FILE *fout = fopen("output.txt", "w");
char input[100000];
int i = 0, ns = 0, eo = 0;
fscanf(fin, "%s", input);
while (input[i] != '*') {
switch (input[i]) {
case 'N': ns++; break;
case 'S': ns--; break;
case 'E': eo++; break;
case 'O': eo--; break;
}
i++;
}
fprintf(fout, "%d", ns*ns + eo*eo);
fclose(fin);
fclose(fout);
return 0;
}
Esercizio da Olimpiadi Informatica
(La biblioteca degli smemorati )
¤  Descrizione del problema
¤  La vostra biblioteca rionale ha qualche problema nello stabilire da quanto tempo
gli utenti tengono i libri. Dovete aiutarli scrivendo un programma che, prese in
input due date del 2015, stabilisca quanti giorni intercorrono tra le due date.
¤  Dati di input
¤  Il file input.txt è formato da una riga che contiene la data iniziale e la data finale
del prestito. Più precisamente, la riga contiene quattro interi: la prima coppia
specifica la data iniziale, la seconda la data finale. Ogni data è formata da due
numeri, e cioè il giorno del mese e il numero del mese.
¤  Dati di output
¤  Il file output.txt deve contenere un'unica riga. Su questa riga dovrà comparire il
numero intero corrispondente ai giorni che intercorrono tra le due date in input.
La biblioteca degli smemorati (2)
¤  Assunzioni
¤  La seconda data non precede mai la prima.
¤  Il numero di giorni considerato non comprende quello
iniziale: quindi, ad esempio, tra il 2 gennaio e il 2 gennaio
intercorrono 0 giorni, tra il 30 gennaio e il 2 febbraio
intercorrono tre giorni, e così via.
¤  L'esecuzione del programma deve terminare entro 5
secondi.
File input.txt
2 3 2 3
30 1 2 2
1 5 2 7
File output.txt
0
3
62