白駿10610号-python


グレースケールアルゴリズム
n=list(str(input()))
n=list(map(int,n))

sum=0
for i in range(len(n)):
    sum+=n[i]
if not (sum%3) and 0 in n  :
    n.sort()
    n.reverse()
    n=list(map(str,n))
    n=''.join(n)
    print(int(n))
else :
    print(-1)
30の倍数は3*10の倍数です.すなわち3の倍数であり、同時に10の倍数である.
3の倍数がすべての桁数の値の和が3の倍数の場合、3の倍数です.したがって,すべての位置のビット数を加算して3で割ると,残りは生じず,3の倍数ではない.なお、10の倍数は1の桁数が0でなければならない.その結果、すべてのビット数の和を3に分け、端数0の値が入力nの30の倍数の値となるようにすることができる.結果を降順に並べ替えると、答えが得られます.