# 随意输入一个数字,用该数字内的数字组合出下一个比该数大的新数。
# 例如输入14321 下一个是 21134
# 这类问题,除了能给出穷举可能序列,并且找出下一个大的数字外
# 可以通过,人工的罗列下几个可能得数字找规律。
# 例如这一题的规则是:从后至前的找第一对逆序位置,交换逆序位置的元素,并且将前逆序位置后的数字进行顺序的重排
1 #!/usr/bin/env python
2 import sys, re, os
3 def findinv( n, end ):
4 i = end
5 while i >= 1:
6 j = i-1
7 while j >= 0:
8 if n[i] > n[j]:
9 return j, i
10 j -= 1
11 i -= 1
12 return -1, -1
13
14 def reorder( n, i ):
15 for j in range(i, len(n)-1):
16 for k in range(j+1, len(n)):
17 if n[j] > n[k]:
18 x = n[j]
19 n[j] = n[k]
20 n[k] = x
21 return n
22
23 def next( n ):
24 end = len(n)
25 if end == 1: return ''.join( map(lambda x:str(x), n) ), False
26 last = n[end-1]
27 i, j = findinv( n, end - 1 )
28 if i==-1 and j==-1: return ''.join( map( lambda x:str(x),n) ), False
29 temp = n[i]
30 n[i] = n[j]
31 n[j] = temp
32 n = reorder(n, i+1)
33 return ''.join(map( lambda x:str(x), n ) ), True
34
35 a = int(sys.argv[1].strip())
36 num = []
37 while a>0:
38 num.append( a%10 )
39 a/=10
40 a = int(a)
41 num.reverse()
42 print num
43 print next( num )