2016-04-15 15 views
-2

任意のサイズの整数値をより小さな整数(チャンク)に分割し、最も効率的な方法で行う必要があります。私が持っているチャンクサイズは、1,2,3,4,6,8,16です。整数をPythonで定義されたサイズのより小さい整数に分割する

整数を分割する必要があるとしましょう。45:16、16、8、4、 1. 私のためにPythonの関数を書くにはどうすればいいですか?

+5

と呼ばれている任意の大きさを考えるとそれはあなたのように見えます私たちにあなたのためのコードを書くことを望みます。多くのユーザーは、苦労しているコーダーのコードを作成したいと考えていますが、通常、ポスターが既に問題を解決しようとしているときにのみ役立ちます。この努力を実証する良い方法は、これまでに書いたコード、サンプル入力(もしあれば)、予想される出力、実際に得られる出力(コンソール出力、トレースバックなど)を含めることです。あなたが提供する詳細があれば、受け取る可能性のある回答が増えます。 [FAQ]と[ask]を確認してください。 –

+1

チャンク(Chunks)とは、指定した数字に足りる小さい数字を意味しますか? – kanayamalakar

+1

OPは必ず怠け者であるという意味ではなく、単にどこからやったらいいのか分からないので、類似しているが非常にスコアの高い質問が多い@Rogalski –

答えて

4

は貪欲なソリューションが動作するあなたが言ったチャンク、を考えると、ここでワーキングソリューションです:

def split_number(n, sizes): 
    sizes = sorted(sizes, reverse=True) 
    ret = {} 

    for size in sizes: 
     if size <= n: 
      ret[size], n = divmod(n, size) 

    return ret 

print split_number(45, [1, 2, 3, 4, 6, 8, 16]) 

は問題はNP困難であるナップザック問題、

1

指定された数値を2進数に変換し、2進数項を10進数に変換することができます。この道45 32以降= 32 + 8 + 4 + 1はあなただけで16 + 16

にそれを分割許可されていないコードは以下の通りである:これは、あなたが欲しいものです

quotient = int(input("Enter a number: ")) 
count=0 
result=[] 
while quotient != 0: 
    remainder = quotient%2 
    quotient = quotient//2 
    count +=1 
    result.append(remainder) 
n=0 
while n<len(result): 
    chunk=result[n]*2**(n) 
    if chunk <=16: 
     print (chunk,end=' ') 
    else: 
     q=chunk/16 
     for times in range(int(q)): 
      print (16,end=' ') 
    n=n+1 
print('\n') 

+0

チャンスには3〜6桁ある...しかし、その考えは正しい。 –

関連する問題