Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #cs ------------ OPDO.VN -----------------------------------------------
- Nhập vào số nguyên dương N (0 ≤ N ≤ 10000). Tìm số siêu xấu nhỏ nhất sao cho số đó lớn hơn N. Giả sử dữ liệu nhập vào hợp lệ.
- Số siêu xấu là số đối xứng chỉ có các chữ số lẻ 1, 3, 5, 7, 9.
- Ví dụ:
- Nhập N = 49 kết quả là 55.
- Nhập N = 123 kết quả là 131.
- Nhập N = 7349 kết quả là 7557.
- #ce ---------------------------------------------------------------------
- Do
- $number = InputBox('Enter', 'Number')
- If @error Then Exit
- Until Number($number) >= 0 And Number($number) <= 10000
- $number = Number($number)
- $timer = TimerInit()
- $kq = _Supper_Ugly_Number($number)
- $timerdiff = TimerDiff($timer)
- MsgBox(64,'Time '&$timerdiff&'ms', 'Supper Ugly Number of '&$number &' = '& $kq)
- Func _Supper_Ugly_Number($number)
- if $number < 10 Then
- Return $number + 2
- Elseif $number < 33 Then
- Return 33
- Elseif $number < 55 Then
- Return 55
- Elseif $number < 77 Then
- Return 77
- Elseif $number < 99 Then
- Return 99
- Elseif $number = 99 or $number = 999 or $number = 9999 Then
- Return StringReplace(String($number),'9','1')&1
- EndIf
- Local $myNumber = StringSplit($number,'')
- Local $numberLen = Number($myNumber[0])
- Local $soHang[Round($numberLen/2)+1]
- For $i = 1 To UBound($soHang)-1
- if $soHang[$i-1] <> '' And Number($soHang[$i-1]) > Number($myNumber[$i-1]) Then
- $soHang[$i] = 1
- Else
- if Mod($myNumber[$i],2) = 1 Then
- $soHang[$i] = $myNumber[$i]
- Else
- $soHang[$i] = $myNumber[$i]+1
- _Tang_So_Hang($soHang, $i)
- if $soHang[$i] > $myNumber[$i] Then
- For $j = $i+1 to UBound($soHang)-1
- $soHang[$j] = 1
- Next
- ExitLoop
- EndIf
- EndIf
- EndIf
- Next
- While 1
- Local $soMoi = _Ghep_Thanh_So($soHang)
- if $numberLen = 2 Then $soMoi = Number($soMoi&$soMoi)
- if Number(_Ghep_So_Xau($soHang, $numberLen)) <= Number($number) Then
- $soHang[UBound($soHang)-1] += 2
- _Tang_So_Hang($soHang, UBound($soHang)-1)
- Else
- ExitLoop
- EndIf
- WEnd
- Return _Ghep_So_Xau($soHang, $numberLen)
- EndFunc ;==>_Supper_Ugly_Number
- Func _Ghep_So_Xau(ByRef $soHang, $numberLen)
- Local $soMoi = _Ghep_Thanh_So($soHang)
- Local $return
- if Mod($numberLen,2) = 1 Then
- $return = $soMoi&StringReverse(StringTrimRight($soMoi,1))
- Else
- $return = $soMoi&StringReverse($soMoi)
- EndIf
- Return Number($return)
- EndFunc
- Func _Ghep_Thanh_So(ByRef $soHang)
- Local $return
- For $i = 1 to UBound($soHang) -1
- $return &= $soHang[$i]
- Next
- Return $return
- EndFunc
- Func _Tang_So_Hang(ByRef $soHang,$j)
- For $i = $j to 1 Step -1
- if $soHang[$i] >= 10 Then
- $soHang[$i] = 1
- Else
- if $i <> $j then $soHang[$i]+=2
- ExitLoop
- EndIf
- Next
- EndFunc
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement