Buenas, al fin vuelvo a pasar por aquí
Solución al primer ejercicio:
Código C++:
Ver original#include <stdio.h>
#include <string.h>
#include <stdlib.h>
char* no_Rep(char *dst, int i, int len)
{
int flag = 0;
if (i < len)
{
dst[i] == dst[i - 1] ? (flag = 1) : (flag = 0);
if (flag)
{
memmove(dst
+ i
- 1, dst
+ i
, len
- i
* sizeof(char)); i -= 1, len -= 1;
}
no_Rep(dst, i + 1, len);
}
else
dst[i] = '\0';
return dst;
}
char* noRep(char* destino, const char* origen)
{
return no_Rep
(destino
, 1, strlen(destino
)); }
int main(void)
{
char cad[] = "abccccfabaddeff";
printf("%s\n", noRep
(destino
, cad
));
return 0;
}
Solución al segundo ejercicio:
Código C++:
Ver original#include <stdio.h>
#include <math.h>
#define MAX(a,b) ((a)>(b)?(a):(b))
#define MIN(a,b) ((a)<(b)?(a):(b))
int dec[5];
int cant(int x, int t)
{
if (x)
t += 1 << (x % 10) * 6, cant(x / 10, t);
else
return t;
}
int comprobar(int min, int max, int x, int b, int t)
{
if(min <= max)
{
b = x / min;
if (min * b == x && ((min % 10) || (b%10))
&& t == cant(min, 0) + cant(b, 0) )
{
printf("%d = %d x %d ", x
, min
, b
); return 1;
}
comprobar(min + 1, max, x, b, t);
}
else return 0;
}
int es_vampiro(int x)
{
int min
, max
, b
= 0, nd
= log10(x
) + 1, t
= cant
(x
, 0); if (nd % 2) return 0;
min = MAX(dec[nd/2-1], (x+dec[nd/2]-2)/(dec[nd/2]-1));
max
= MIN
(x
/min
, sqrt(x
));
return comprobar(min, max, x, b, t);
}
int main(void)
{
dec[0] = 1;
for (int i = 1; i < 5; i++) dec[i] = dec[i - 1] * 10;
printf("\n%d\n", es_vampiro
(13078260));
return(0);
}
Saludos