ejercicios de la acm (3) 1

4
Ejercicios de la ACM Linares Cervantes; Luis Miguel Ciencias de la Computaci´ on Universidad Cat´ olica San Pablo [email protected] April 24, 2012 1 Quicksum Lo que se ve en este probleman es multiplicar la posici´ on de una letra en el alfabeto con un contador que va 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 se cumpla la condi ci´ on que es cuando termina el while ingresando ’#’.  En el segundo while se realiza la operaci’on que conciste en una sumatoria total de la multiplicando de la posici´ on en el alfabeto de una letra con un contador que va incrementando y obteniendo el total de una suma de todas estas, este while naliza en n de cadena. 1 .1 Codig o 1  #include <cstdio > 2  #include <string > 3 4  using namespace std; 5 6  void quickSum(){ 7  char temp[255]; 8  while (temp[0] != ’#’){ 9  gets(temp); 10  int cont = 0; 11  in t s u m = 0; 12  while(temp[cont] != ’\0’){ 13  if(temp[cont] == 32){cont++;} 14  else{ 15  sum = sum + ((cont + 1) * (temp[cont] - 64)); 16  cont++; 17  } 18  } 19  if(temp[0] != ’#’) printf("%d\n",sum); 20  } 21  } 22 23  int main(){ 24  quickSum(); 25  } 1

Upload: luis-miguel

Post on 20-Jul-2015

237 views

Category:

Documents


0 download

TRANSCRIPT

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

[email protected]

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