Algun genio de programacion de C#????

Necesito hacer un programa que resuelva este problema.... alguien me puede dar una luz????

www.spoj.pl/problems/CANTON

Según me dicen el tema se debe hacer con una formúla matemática
No creo que haya una formula concreta para demostrar que un conjunto es enumerable. Lo que hace el es un simple recorrido por todos los racionales en forma de "serpiente"

Yo lo haria con contadores:

- Entras un input = 14
- mientras input != 0
- numero actual = ( posicion de fila / posicion de columna)

para saber en que punto del recorrido esta otro contador. Empezamos x=1 -> 1/1, ahora x=2 (genera 2 numeros, 1/2 y 2/1), etc. Cara numero que generes debes bajar el input en 1.

Espero que te sirva ^^
No parece muy complicado, es como te han dicho, son dos bucles encadenados

f = filas , c = columnas, contador

printf("Escribe el número :"):
scanf("%d",&c);contador2=c;


while ( f < c )
{

for ( contador=0;contador<= c-f;contador++)
{
    printf ( f, "/" , contador+1 " ");

}
   printf("\n");   
   f++;

}



Supongo que sería eso. Revisa la sintaxi, ya que llevo más o menos un año como aquel que dice sin tocar el C...

pd. Ahora que leo la fórmula me la he pasao por el forro... xD Yo lo he hecho con dos bucles encadenados... con fórmulas ahora mismo no se.. lo miraré cuando tenga un rato a ver, aunque me parece que el usuario de arriba ya te lo ha resuelto.
// Nos valemos de la formula 1+2+...+n = n(n+1)/2
// Recorremos la lista de Cantor como si fuera un triángulo. Me referiré más adelante a las "filas" como "filas del triángulo" y no "filas de la lista de Cantor".
// Las n primeras filas de un triángulo tienen 1+2+...+n elementos. Trataremos de ver en qué fila estamos haciendo la comparación n(n+1)/2 =? K. Es decir, n(n+1)=? 2K.

Input: posición K

r=(int)sqrt(2.0*K);

if(r*r+1 >=K) P=r+1; // P es la fila
else P=r+2;

//--------

if (p=(int)p/2 * 2) //si P es par.... recorremos la fila del triángulo de arriba-derecha a abajo-izquierda
el numero es [K- P*(P+1)/2 +1] / [P-(K-P(P+1)/2) +1]

else //si P es impar.... recorremos la fila del triángulo de abajo-izquierda a arriba-derecha
el numero es [P-(K-P(P+1)/2) +1] / [1+(K-P(P+1)/2)-P]




Así a grandes trazos esto es el pseudocódigo. No tengo ganas de repasarlo, y alomejor en las cuentas me he colado con algun +1 que falte/sobre o algún signo cambiado. Compruébalo, pero la idea es correcta.
3 respuestas