02/12/2010, 07:09
|
| | Fecha de Ingreso: noviembre-2008
Mensajes: 62
Antigüedad: 16 años Puntos: 1 | |
Respuesta: Ingresar los números naturales del 1 al 9 formando un triángulo y sumarlo Espero que te sirva
Código:
private void TrianguloCapicua()
{
//Numero de Filas que va a tener el Triangulo
//Definida por el usuario
int FilasTriangulo = 4;
int Columnas = (FilasTriangulo * 2) - 1;
//La longitud de Cada Fila ( 1, 3, 5, 7, ...)
int NumeroDigitos = 1;
//Creamos la Matriz del triangulo;
// [n+1] = -------------
// [n+2] = El resultado de la suma
String[] Triangulo = new String[FilasTriangulo + 2];
Random r = new Random();
String Espacios;
// Rellenar las n - 1 filas
for (int i = 0; i < FilasTriangulo - 1; i++)
{
Espacios = String.Empty;
//Espacios = NumeroFilas - NumeroFila
for (int nEspacios = 0; nEspacios < FilasTriangulo - i - 1; nEspacios++)
Espacios = Espacios + " ";
Triangulo[i] = Triangulo[i] + Espacios;
//Numeros = NumeroDigitos;
for (int j = 0; j < NumeroDigitos; j++)
Triangulo[i] = Triangulo[i] + r.Next(0, 9).ToString();
Triangulo[i] = Triangulo[i] + Espacios;
NumeroDigitos += 2;
}
//Calculo de la Fila n
// Las j columnas hasta la mitad se rellenan sin preocuparnos del numero
Char[] Filan = new Char[Columnas];
Char[] Filan1 = new Char[Columnas];
for (int j = (FilasTriangulo * 2) - 1; j > ((FilasTriangulo * 2) - 1) / 2; j--)
Filan[j - 1] = r.Next(0, 9).ToString()[0];
//Las otras j columnas.
for (int j = 0; j < Columnas / 2; j++)
Filan[j] = ' ';
//Pasar de char[] a String
for (int j = 0; j < Columnas; j++)
Triangulo[FilasTriangulo - 1] = Triangulo[FilasTriangulo -1]+Filan[j].ToString();
int Suma;
int Acarreo;
char C;
int Capicua;
for (int j = Columnas - 1; j >= 0; j--)
{
Suma = 0;
Acarreo=0;
//Obtengo el Acarreo
if (j + 1 < Columnas)
{
for (int i = 0; i < FilasTriangulo; i++)
{
if (Triangulo[i][j+1] != ' ')
Suma = Suma + Int32.Parse(Triangulo[i][j+1].ToString());
if (j < (Columnas / 2) - 1 && i + 1 == FilasTriangulo)
Suma = Suma + Int32.Parse(Filan1[j + 2].ToString());
}
//Si la suma es mayor 9 hay acarreo
if (Suma > 9)
Acarreo = Suma / 10;
}
Suma = Acarreo;
//Sumo la columna
for (int i = 0; i < FilasTriangulo; i++)
{
if (Triangulo[i][j] != ' ')
Suma = Suma + Int32.Parse(Triangulo[i][j].ToString());
}
if (j >= (Columnas / 2))
{
//Las primeras j columnas no hay que calcularlas
Filan1[j] = Suma.ToString()[Suma.ToString().Length - 1];
}
else
{
//Las j columnas siguientes hay que calcularlas
//Obtengo su capicua = Mitad * 2 - pos
C = Filan1[(Columnas / 2) * 2 - j];
Capicua = Int32.Parse(C.ToString());
while (Capicua < Suma)
Capicua += 10;
Capicua = Capicua - Suma;
Filan[j] = Capicua.ToString()[0];
Filan1[j] = C;
}
}
//Pasar de char[] a String
Triangulo[FilasTriangulo - 1] = String.Empty;
for (int j = 0; j < (FilasTriangulo * 2) - 1; j++)
{
Triangulo[FilasTriangulo + 1] = Triangulo[FilasTriangulo + 1] + Filan1[j].ToString();
Triangulo[FilasTriangulo] = Triangulo[FilasTriangulo] + "-";
Triangulo[FilasTriangulo - 1] = Triangulo[FilasTriangulo - 1] + Filan[j].ToString();
}
//Imprimimos el Triangulo
for (int i = 0; i < FilasTriangulo + 2; i++)
Console.WriteLine(Triangulo[i]);
}
Código:
6
272
80253
6162313
428113227
30531214035
6573062756020
183453305350512
48120568450413513
6250700334058571246
-------------------
6757289533359827576
Última edición por Ferdinandum; 03/12/2010 a las 06:02 |