Foro de elhacker.net

Programación => Programación C/C++ => Mensaje iniciado por: el gusanillo en 26 Febrero 2018, 11:07 am



Título: Buenos días,tengo muchas dudas con un ejercicio de caracteres.
Publicado por: el gusanillo en 26 Febrero 2018, 11:07 am
Escribid un programa que dado un array de 10 caracteres (introducidos a mano en el código),calcule cuántas veces aparecen dos caracteres iguales seguidos. Si por ejemplo hay tres caracteres iguales seguidos,consideremos que un carácter no puede pertenecer a dos parejas.


Título: Re: Buenos días,tengo muchas dudas con un ejercicio de caracteres.
Publicado por: MAFUS en 26 Febrero 2018, 11:26 am
Piensa en una lista de caracteres aleatorios y no conoces su orden en una cinta de papel y esta cinta de papel pasa por debajo de un hoja con una ventanita que solo deja ver un carácter. Tienes una lápiz para escribir los resultados.
¿Cómo procederías?

Código:
    |----------------| < hoja opaca
    |       _ventana |
====|===???|A|????===|==== < cinta con caracteres
    |       -        |
    |----------------|
Los ? son los caracteres que quedan ocultos y solo se mostrarán al pasar por la ventana


Título: Re: Buenos días,tengo muchas dudas con un ejercicio de caracteres.
Publicado por: Mahlahj en 27 Febrero 2018, 06:50 am
Supongo te has de referir a la moda de los datos... ¿?


Título: Re: Buenos días,tengo muchas dudas con un ejercicio de caracteres.
Publicado por: dijsktra en 27 Febrero 2018, 12:47 pm
Un problema bonito y "raro"...
Ahí va un programa que vale para cualquiera N carcateres, (hasta 1000), metidos por teclado, hasta que se mete el fin de fichero... (no incluye separadores entre los caracteres)

Código
  1. #include <iostream>
  2. #include <algorithm> // min, max
  3.  
  4. using namespace std;
  5.  
  6. #define MAX 1000
  7.  
  8. /*
  9.  
  10.  
  11.   P : N >= 0
  12.   Q : count = #i : 0 <= i < N-1: twin(V,N,i)
  13.  
  14.   where twin(V,N,i) ::= V[i]==V[i+1]) &&
  15.                         ((i==0) ||
  16.                         ((i>0) and V[i]!=V[i-1]) ||
  17.                         (i>1) and V[i-1]==V[i-2])
  18.  
  19. */
  20. int twins(const int V[MAX], const int N)
  21. {
  22.  int n,count;
  23.  for(n=count=0; n<N-1 ; n+=1+(V[n]==V[n+1]))
  24.    count += (V[n]==V[n+1]) ;
  25.  return count;
  26. }
  27.  
  28. int main(int argc, char *args[])
  29. {
  30.  char c;
  31.  int N;
  32.  int V[MAX];
  33.  for ( N=0  ; (N<MAX) && (cin >> c) ; N++ )  V[N]= c;
  34.  cout << N << " " << twins(V,N) << endl;
  35.  return 0;
  36. }
  37.  
  38. /*
  39.  
  40. 0           n                             N
  41. +-----+-----+-----+-----+-----+-...-+-----+
  42. |  a  |  a  |  a  |  b  |  b  |     |  r  |
  43. +-----+-----+-----+-----+-----+-...-+-----+
  44.  
  45. (Bizarre...)
  46.  
  47.   I : Q[N/n] and
  48.       0 <= n <= N
  49.        
  50.   B : n<N-1
  51.   C(n) : N-n >= 0
  52.   step : n = n + (1 + V[i]==V[i+1])
  53.   O(n) (linear)
  54.  
  55. */




Código:
a

El primer parametro da el numero de caracteres leidos (N) el segundo, el numero de "parejas" según el criterio del problema

Código:
1 0

Código:
aaa

Código:
3 1

Código:
aaaaa

Código:
5 2

Código:
aaabbbcccdddeeefffggghhhiiijjjkkklllmmmnnnooo*

Código:
46 15

(La linea tiene 46 caracteres y 15 parejas)

Y la bonita. Es importante el * porque cin no toma separadores y saldrian más parejas de las normales, juntando los renglones.
Código:
aaabbbcccdddeeefffggghhhiiijjjkkklllmmmnnnooo*
oooaaabbbcccdddeeefffggghhhiiijjjkkklllmmmnnn*
nnnoooaaabbbcccdddeeefffggghhhiiijjjkkklllmmm*
mmmnnnoooaaabbbcccdddeeefffggghhhiiijjjkkklll*
lllmmmnnnoooaaabbbcccdddeeefffggghhhiiijjjkkk*
kkklllmmmnnnoooaaabbbcccdddeeefffggghhhiiijjj*
jjjkkklllmmmnnnoooaaabbbcccdddeeefffggghhhiii*
iiijjjkkklllmmmnnnoooaaabbbcccdddeeefffggghhh*
hhhiiijjjkkklllmmmnnnoooaaabbbcccdddeeefffggg*
ggghhhiiijjjkkklllmmmnnnoooaaabbbcccdddeeefff*
fffggghhhiiijjjkkklllmmmnnnoooaaabbbcccdddeee*
eeefffggghhhiiijjjkkklllmmmnnnoooaaabbbcccddd*
dddeeefffggghhhiiijjjkkklllmmmnnnoooaaabbbccc*
cccdddeeefffggghhhiiijjjkkklllmmmnnnoooaaabbb*
bbbcccdddeeefffggghhhiiijjjkkklllmmmnnnoooaaa*

15 lineas por 15 parejas da 225 parejas


Código:
690 225




Título: Re: Buenos días,tengo muchas dudas con un ejercicio de caracteres.
Publicado por: el gusanillo en 2 Marzo 2018, 18:51 pm
Buenas tardes, muchas gracias por la ayuda.Dedico el fin de semana para trabajarlo y plantear posibles dudas.
Un saludo.