Ejercicios de La ACM (3) 1

Post on 20-Jul-2015

237 views 0 download

Transcript of Ejercicios de La ACM (3) 1

5/17/2018 Ejercicios de La ACM (3) 1 - slidepdf.com

http://slidepdf.com/reader/full/ejercicios-de-la-acm-3-1 1/4

Ejercicios de la ACM

Linares Cervantes; Luis MiguelCiencias de la Computacion

Universidad Catolica San Pablo

luis.linares@ucsp.edu.pe

April 24, 2012

1 Quicksum

Lo que se ve en este probleman es multiplicar la posicion de una letra en el alfabeto con un contador queva incrementando (el espacio vale 0), y sumar las multiplicaciones.

• Se usa una cadena de char en el que se guarda cada frase ingresada, tiene un limite de 255 caracteres(todos mayusculas).

• En el primer while se hace el procedimiento para ingresar todas las cadenas deseadas hasta que secumpla la condicion que es cuando termina el while ingresando ’#’.

• En el segundo while se realiza la operaci’on que conciste en una sumatoria total de la multiplicandode la posicion en el alfabeto de una letra con un contador que va incrementando y obteniendo eltotal de una suma de todas estas, este while finaliza en fin de cadena.

1.1 Codigo

1 # i n c l u d e < c s t d io >

2 # i n c l u d e < s t r i ng >

3

4 u s in g n a me s pa c e s t d ;

5

6 v o i d q u i c k S u m ( ) {

7 c h a r t e m p [ 2 5 5 ];

8 w h il e ( t e mp [ 0 ] ! = ’ # ’ ){

9 g e t s ( t e m p ) ;

10 i nt c on t = 0 ;

11 int sum = 0;

12 w h il e ( t em p [ c on t ] ! = ’ \ 0 ’) {

13 i f ( t e m p [ c o nt ] = = 3 2 ) { c o n t + + ; }14 else{

15 s um = s um + ( ( co nt + 1) * ( t em p[ c on t] - 6 4) ) ;

16 cont++;

17 }

18 }

19 i f ( te m p [ 0] ! = ’ # ’ ) p r in t f ( " %d \ n " , su m ) ;

20 }

21 }

22

23 i nt m a in ( ) {

24 q u i c k S u m ( ) ;

25 }

1

5/17/2018 Ejercicios de La ACM (3) 1 - slidepdf.com

http://slidepdf.com/reader/full/ejercicios-de-la-acm-3-1 2/4

2 Vowels Frequencies

En este problema se trata de buscar cuantas veces se repite las vocales en una frase, se muestra una listade las vocales y su cantidad de repeticiones, de forma ordenada de mayor a menor.

• En el primer bucle ’for’ se hace el procedimiento para ingresar todas las cadenas deseadas hasta

que se cumpla la condicion que es cuando termina el while ingresando ’#’.

• Se crea un vector de 5 posiciones donde contendra los contadores de cada vocal, la posici on en elvector depende a la posicion de la letra, ”0 = a ... 4 = u”, e incrementando en 1 cada posiciondependiendo de la letra para tener el total.

• En el siguiente bucle de ’fors’ es donde se realiza la operaci on de ordenamiento, donde se crea unvector de chars con las letras y se ordena el vector de los contadores de letras (de mayor a menor) junto con el vector de las letras para espcificar a quien pertenece cada contador.

• En el ultimo bucle se imprime los resultados.

2.1 Codigo

1 # i n c l u d e < i o s t re a m >

2 # i n c l u d e < c s t d io >

3

4 u s in g n a me s pa c e s t d ;

5

6 v o i d v o w e l s ( ) {

7 c h a r f r a s e [ 2 5 5 ];

8

9 f o r ( ; ; ) {

10 g e t s ( f r a s e ) ;

11 i n t i = 0 ;

12

13 i f ( f ra s e [ 0] = = ’ # ’ ) b r ea k ;14 i nt v oc al 1 [ 5] = { 0 ,0 , 0 ,0 , 0} ;

15 i nt v oc al 2 [ 5] ;

16

17 w h il e ( f r as e [ i ] ! = ’ \ 0 ’) {

18 s w i t ch ( f r a s e [ i ] ) {

19 c a se ’ a ’ : v o ca l 1 [ 0 ]+ + ; b r ea k ;

20 c a se ’ e ’ : v o ca l 1 [ 1 ]+ + ; b r ea k ;

21 c a se ’ i ’ : v o ca l 1 [ 2 ]+ + ; b r ea k ;

22 c a se ’ o ’ : v o ca l 1 [ 3 ]+ + ; b r ea k ;

23 c a se ’ u ’ : v o ca l 1 [ 4 ]+ + ; b r ea k ;

24 }

25 i++;

26 }

27

28 c h ar v o c1 [ 5 ] = { ’ a ’ , ’e ’ , ’ i ’, ’ o ’ ,’ u ’ };

29 c h a r v o c 2 [ 5 ] ;

30 for ( int i = 0; i < 5; i ++) {

31 i n t t = i ;

32 for ( int j = 0; j < 5; j ++) {

33 i f( v oc al 1 [ j] > v oc al 2 [ i] ) t = j ;

34 }

35 v o ca l 2 [ i ] = v o ca l 1 [ t ];

36 v oc al 1 [ t] = 0 ;

37 voc 2[ i] = v oc1 [t ];

38 }

39

40 for ( int k = 0; k < 4; k ++) {41 c o ut < < v o c 2 [ k ] < < " : " < < v o c al 2 [ k ] < < " " ;

42 } c o u t < < v o c 2 [ 4 ] < < " : " < < v o c a l 2 [ 4 ] < < " . \ n " ;

2

5/17/2018 Ejercicios de La ACM (3) 1 - slidepdf.com

http://slidepdf.com/reader/full/ejercicios-de-la-acm-3-1 3/4

43 }

44

45 }

46

47 i nt m a in ( )

48 {

49

v o w e l s ( ) ;50 r e tu r n 0 ;

51 }

3 House Numbering

En este problema se trata de transformar el numero de una casa a binario y cada binario obtenido tratarde sacar la suma total de este determinado por el costo de 1 y 0.

• En el primer bucle solo se realiza el ingreso de todos los datos en una lista, esta ya esta predefinidapor la STL, siendo una lista de string.

• En el segundo bucle se realiza la operacion, siendo las condicones ”COST” que son los que contieneel costo de los binarios ’1’ y ’0’ y el fin de la lista que es el signo’#’, los valores de la lista sontransformados a enteros para utilizarlos.

• Al tomar los datos se hace la respectiva operacion, que es la suma de las multiplicaciones de acuerdoal costo de los binarios ’1’ y ’0’, y asi se obtiene el resultado, (linea 43 y 44).

3.1 Codigo

1 # i n c l u d e < i o s t re a m >

2 # i n c l u d e < s t r i ng >

3 # i n c lu d e < l is t >

4 # i n c l u d e < i t e r at o r >5 # i n c l u d e < c s t dl i b >

6

7 u s in g n a me s pa c e s t d ;

8

9 v o id c o st ( ) {

10 l i st < s t ri n g > l i s ta ;

11

12 f o r ( ; ; ) {

13 s t r i ng d a t o ;

14 c i n > > d a t o ;

15 l i s t a . p u s h _ b a c k ( d a t o ) ;

16 i f ( da t o = = " # " ) b r e a k ;

17

}18

19 l i st < s t ri n g > : : i t e r a to r i t e = l i s ta . b e g i n ( ) ;

20

21 s t r i ng t e m p ;

22 int set = 1;

23

24 f o r ( ; ; ) {

25 t em p = ( * it e );

26 i f ( te m p = = " # " ) b r e a k ;

27 i n t a , b , t ;

28 i f ( te m p = = " C O ST " ) {

29 ite++;

30 a = a t oi ( ( * i te ) . c _ st r ( ) ) ;

31 ite++;32 b = a t oi ( ( * i te ) . c _ st r ( ) ) ;

33 ite++;

3

5/17/2018 Ejercicios de La ACM (3) 1 - slidepdf.com

http://slidepdf.com/reader/full/ejercicios-de-la-acm-3-1 4/4

34 t em p = ( * it e );

35 }

36 c ou t < < " S e t " < < s et < < e n d l ;

37 f o r ( ; ; ) {

38 i nt s um = 0;

39 i f ( te m p = = " C O ST " ) b r ea k ;

40

if (temp == " #" ) break ;41 t = a t oi ( ( t e mp . c _ s tr ( ) ) ) ;

42 w hi le ( t > 0 ){

43 if (( t % 2) == 0) sum = sum + a ;

44 if (( t % 2) == 1) sum = sum + b ;

45 t = t / 2 ;

46 }

47 c o u t < < s u m < < e n d l ;

48 ite++;

49 t em p = ( * it e );

50 }

51 set++;

52 }

53

54 }55

56 i nt m a in ( )

57 {

58 c o s t ( ) ;

59 r e tu r n 0 ;

60 }

4