Kaprekar 495 (resolt)
Public Class Form1
Private Sub MostrarIteraciones(numero As Integer)
' Netejar etiqueta abans de mostrar noves iteracions
lblIteraciones.Text = ""
' Realitzar iteracions fins a 495
Do While numero <> 495
' Desglossar el número en dígits
Dim digitos() As Integer = DesglosarDigitos(numero)
' Ordenar els dígits en ordre ascendent i descendent
Array.Sort(digitos)
Dim ascendente As Integer = UnirDigitos(digitos)
Array.Reverse(digitos)
Dim descendente As Integer = UnirDigitos(digitos)
' Calcular la diferencia i mostrar els resultats
numero = Math.Abs(ascendente - descendente)
lblIteraciones.Text &= $"{ascendente} - {descendente} = {numero}" & vbCrLf
' Sortir del bucle si arriba a 495
If numero = 495 Then
lblIteraciones.Text &= vbCrLf & "Número de Kaprekar (495) aconseguit. Fi del procés"
Exit Do
End If
Loop
End Sub
Private Function DesglosarDigitos(numero As Integer) As Integer()
' Desglossar el número en dígits
Dim digitos() As Integer = New Integer(2) {}
digitos(0) = numero \ 100
digitos(1) = (numero Mod 100) \ 10
digitos(2) = numero Mod 10
Return digitos
End Function
Private Function UnirDigitos(digitos() As Integer) As Integer
' Unir els dígits en un número
Return digitos(0) * 100 + digitos(1) * 10 + digitos(2)
End Function
Private Sub btnIniciar_Click_1(sender As Object, e As EventArgs) Handles btnIniciar.Click
' Verificar que han entrat 3 dígits
If txtDigito1.Text.Length = 1 AndAlso txtDigito2.Text.Length = 1 AndAlso txtDigito3.Text.Length = 1 Then
' Obtenir el número de 3 dígits
Dim numero As Integer = CInt(txtDigito1.Text & txtDigito2.Text & txtDigito3.Text)
' Realitzar iteracions fins a 495
MostrarIteraciones(numero)
Else
MsgBox("Entra un número a cada capsa de text")
End If
End Sub
End Class