Test Foro de elhacker.net SMF 2.1

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?


    |----------------| < 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)


#include <iostream>
#include <algorithm> // min, max

using namespace std;

#define MAX 1000

/*


 P : N >= 0
 Q : count = #i : 0 <= i < N-1: twin(V,N,i)

 where twin(V,N,i) ::= V[i]==V[i+1]) &&
                       ((i==0) ||
                       ((i>0) and V[i]!=V[i-1]) ||
                       (i>1) and V[i-1]==V[i-2])

*/
int twins(const int V[MAX], const int N)
{
 int n,count;
 for(n=count=0; n<N-1 ; n+=1+(V[n]==V[n+1]))
   count += (V[n]==V[n+1]) ;
 return count;
}

int main(int argc, char *args[])
{
 char c;
 int N;
 int V[MAX];
 for ( N=0  ; (N<MAX) && (cin >> c) ; N++ )  V[N]= c;
 cout << N << " " << twins(V,N) << endl;
 return 0;
}

/*

0           n                             N
+-----+-----+-----+-----+-----+-...-+-----+
|  a  |  a  |  a  |  b  |  b  |     |  r  |
+-----+-----+-----+-----+-----+-...-+-----+

(Bizarre...)

 I : Q[N/n] and
     0 <= n <= N
     
 B : n<N-1
 C(n) : N-n >= 0
 step : n = n + (1 + V[i]==V[i+1])
 O(n) (linear)

*/





a

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

1 0

aaa

3 1

aaaaa

5 2

aaabbbcccdddeeefffggghhhiiijjjkkklllmmmnnnooo*

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.

aaabbbcccdddeeefffggghhhiiijjjkkklllmmmnnnooo*
oooaaabbbcccdddeeefffggghhhiiijjjkkklllmmmnnn*
nnnoooaaabbbcccdddeeefffggghhhiiijjjkkklllmmm*
mmmnnnoooaaabbbcccdddeeefffggghhhiiijjjkkklll*
lllmmmnnnoooaaabbbcccdddeeefffggghhhiiijjjkkk*
kkklllmmmnnnoooaaabbbcccdddeeefffggghhhiiijjj*
jjjkkklllmmmnnnoooaaabbbcccdddeeefffggghhhiii*
iiijjjkkklllmmmnnnoooaaabbbcccdddeeefffggghhh*
hhhiiijjjkkklllmmmnnnoooaaabbbcccdddeeefffggg*
ggghhhiiijjjkkklllmmmnnnoooaaabbbcccdddeeefff*
fffggghhhiiijjjkkklllmmmnnnoooaaabbbcccdddeee*
eeefffggghhhiiijjjkkklllmmmnnnoooaaabbbcccddd*
dddeeefffggghhhiiijjjkkklllmmmnnnoooaaabbbccc*
cccdddeeefffggghhhiiijjjkkklllmmmnnnoooaaabbb*
bbbcccdddeeefffggghhhiiijjjkkklllmmmnnnoooaaa*


15 lineas por 15 parejas da 225 parejas


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.