Python
 Computer >> コンピューター >  >> プログラミング >> Python

Pythonでキャンディーを人々に配布する


次のように、いくつかのキャンディーをn人の列に配布したいとします-

  • 次に、最初の人に1つのキャンディーを、2番目の人に2つのキャンディーを、というように、最後の人にn個のキャンディーを与えるまで続けます。
  • その後、再び列の最初に戻り、最初の人にn + 1個のキャンディー、2番目の人にn + 2個のキャンディーを与え、最後の人に2*n個のキャンディーを与えるまで続けます。 。

キャンディーがなくなるまで、このプロセスを繰り返します。最後の人は残りのキャンディーをすべて受け取ります(必ずしも前のギフトより1つ多いとは限りません)。

キャンディーの最終的な分布を表す配列を返す必要があります。したがって、キャンディーが7で、n =3であるとすると、出力は[2、2、3]になります。したがって、最初の人は1を取得し、配列は[1、0、0]、2番目の人は2、次に配列は[1、2、0]、3番目の人は3、次に配列は[1、 2、3]、そして最後に最初のものが再び1を得たので、配列は[2、2、3]

これを解決するには、次の手順に従います-

  • resはn個の要素の配列であり、0で埋めます
  • インデックス:=0
  • キャンディー>0
    • res [index mod n]:=res [index modn]+キャンディーの最小値とインデックス+1
    • キャンディー:=キャンディー– 1
    • index:=index + 1
  • return res

理解を深めるために、次の実装を見てみましょう-

class Solution(object):
   def distributeCandies(self, candies, num_people):
      res = [0 for i in range(num_people)]
      index = 0
      while candies>0:
         res[index%num_people] += min(candies,index+1)
         candies-=(index+1)
         index+=1
      return res
ob1 = Solution()
print(ob1.distributeCandies(8, 3))

入力

8
3

出力

[3, 2, 3]

  1. Pythonのissuperset()

    この記事では、Pythonでのissuperset()と、さまざまな分野でのその実装について学習します。 このメソッドは、セットBのすべての要素に引数として渡されるすべての要素セットAが含まれている場合はブール値Trueを返し、Aのすべての要素がBに存在しない場合はfalseを返します。 これは、BがAのスーパーセットである場合、それを意味します returns true; else False 例 いくつかの例を見てみましょう A = {'t','u','t','o','r','i',

  2. Pythonのアンダースコア(_)

    Pythonでは、シングルアンダースコア(_)を使用する場合もあれば、ダブルアンダースコア(__)を使用する場合もあります。 Pythonでは、アンダースコアを使用する次のケースがあります。 最後の式の値をインタープリターに格納する場合。 一部の値を無視したい場合。 変数または関数の宣言用。 数値の横方向の値の桁を区切るため。 「国際化(i18n)」または「ローカリゼーション(l10n)」機能としても使用されます。 今度はすべての場合のいくつかの例。 インタプリタで使用 Pythonインタープリターは、最後の式の値を「_」に格納します。 >>> 20 20 &