Fotolog

A través del espejo
2010-10-12: A través del espejo
¡La radio habla en binario!
2010-10-10: ¡La radio habla en binario!
Gigaminx (regalo por mi cumple)
2010-09-16: Gigaminx (regalo por mi cumple)
Trini en bici
2010-09-05: Trini en bici
Valporquero
2010-08-28: Valporquero
Mi bici nueva
2010-08-22: Mi bici nueva
Boda de Mario y Ana
2010-08-13: Boda de Mario y Ana
De cañones en Guara
2010-08-07: De cañones en Guara
Trini y Mari en Marbella
2010-08-05: Trini y Mari en Marbella
Trini y Chelo en Tabarca
2010-08-03: Trini y Chelo en Tabarca
Valid XHTML 1.1
Acceder
Volver a la lista de problemas

Ackermann Functions

371.c

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <math.h>

#define MIN(x,y) ((x) < (y) ? (x) : (y))
#define MAX(x,y) ((x) > (y) ? (x) : (y))

int length(int len, long num)
{
	if (num<=0) {
		return len;
	} else if ((num==1) && (len!=0)) {
		return len;
	} else if (num%2) {
		return length(len+1, 3*num+1);
	} else {
		return length(len+1, num/2);
	}
}

int main(int argc, char *argv[])
{
	char buf[1024];

	while(fgets(buf, 1024, stdin)) {
		long a, b;
		long i;
		int li;
		long max;
		int lmax;
		if (sscanf(buf, "%ld %ld", &a, &b) != 2 ) {
			exit(1);
		}
		max=0;
		lmax=0;
		if (a==0 && b==0) {
			exit(0);
		}
		for(i=MIN(a,b); i<=MAX(a,b); i++) {
			li = length(0,i);
			if (li>lmax) {
				max=i;
				lmax=li;
			}
		}
		printf("Between %ld and %ld, %ld generates the longest sequence of %d values.\n",
			MIN(a,b), MAX(a,b), max, lmax);
	}
	exit(0);
}