Blogia
nosequemasda

Capicuas

Del 10.000 al 99.999, de todos ellos, ¿cuántos son capicúas?

Este problema se resuelve por conteo.


Así los capicúas que empiezan por 1 son de la forma "1 a b a 1", "a" puede ser 0, 1, 2..., 9 (10 casos) y por cada uno de ellos, por ejemplo "1 1 b 1 1", "b" puede ser cualquier número 0,1, ..., 9 (10 casos). Luego hay 10 x 10 = 100 capicúas que empiezan por uno. Y siguiendo un razonamiento similar para los capicúas que empiezan por 2, 3,..., 9 se llega a la conclusión de que hay 100 x 9 = 900 capicúas.

 

Copio una macro de Excel para generar capicuas:

'Este programa genera una lista de números capicuas a partir de un número dado (hasta 10 cifras).
'Fecha: 20/12/2007

Sub Capicuas()
fin = ActiveCell.Value 'Guarda el valor-número de la celda activa
For i = 1 To fin
j = Len(i) 'Guarda cuántas cifras tiene "i"
Select Case j

Case 1

Case 2
parteIzq = Left(i, 1)
parteDer = Right(i, 1)
If parteIzq = parteDer Then
ActiveCell.Offset(1, 0).Range("A1").Select
ActiveCell.FormulaR1C1 = i
End If

Case 3
parteIzq = Left(i, 1)
parteDer = Right(i, 1)
If parteIzq = parteDer Then
ActiveCell.Offset(1, 0).Range("A1").Select
ActiveCell.FormulaR1C1 = i
End If

Case 4
parteIzq = Left(i, 2)
parteDer = Mid(i, 4, 1) & Mid(i, 3, 1)
If parteIzq = parteDer Then
ActiveCell.Offset(1, 0).Range("A1").Select
ActiveCell.FormulaR1C1 = i
End If

Case 5
parteIzq = Left(i, 2)
parteDer = Mid(i, 5, 1) & Mid(i, 4, 1)
If parteIzq = parteDer Then
ActiveCell.Offset(1, 0).Range("A1").Select
ActiveCell.FormulaR1C1 = i
End If

Case 6
parteIzq = Left(i, 3)
parteDer = Mid(i, 6, 1) & Mid(i, 5, 1) & Mid(i, 4, 1)
If parteIzq = parteDer Then
ActiveCell.Offset(1, 0).Range("A1").Select
ActiveCell.FormulaR1C1 = i
End If

Case 7
parteIzq = Left(i, 3)
parteDer = Mid(i, 7, 1) & Mid(i, 6, 1) & Mid(i, 5, 1)
If parteIzq = parteDer Then
ActiveCell.Offset(1, 0).Range("A1").Select
ActiveCell.FormulaR1C1 = i
End If

Case 8
parteIzq = Left(i, 4)
parteDer = Mid(i, 8, 1) & Mid(i, 7, 1) & Mid(i, 6, 1) & Mid(i, 5, 1)
If parteIzq = parteDer Then
ActiveCell.Offset(1, 0).Range("A1").Select
ActiveCell.FormulaR1C1 = i
End If

Case 9
parteIzq = Left(i, 4)
parteDer = Mid(i, 9, 1) & Mid(i, 8, 1) & Mid(i, 7, 1) & Mid(i, 6, 1)
If parteIzq = parteDer Then
ActiveCell.Offset(1, 0).Range("A1").Select
ActiveCell.FormulaR1C1 = i
End If

Case 10
parteIzq = Left(i, 5)
parteDer = Mid(i, 10, 1) & Mid(i, 9, 1) & Mid(i, 8, 1) & Mid(i, 7, 1) & Mid(i, 6, 1)
If parteIzq = parteDer Then
ActiveCell.Offset(1, 0).Range("A1").Select
ActiveCell.FormulaR1C1 = i
End If

Case Else

End Select

'Comprueba que la fila activa es la 65536 y entonces sube a la fila 2
'en la siguiente columna:
If ActiveCell.Row = 65536 Then
ActiveCell.Offset(-65535, 1).Range("A1").Select
End If
Next i

End Sub

 

0 comentarios