1104-分キャンディII
前言
Weekly Contest 143の分糖類II
並んで座って、キャンディを分けます.
私たちはキャンディ
最初の子供に
それから、私たちは再びチームの起点に戻って、最初の子供に
上記の手順(毎回前回より1粒多くのキャンディを与え、チームのゴールに着いたら再びチームのスタート地点から)を繰り返して、私たちがすべてのキャンディを分け終わるまで、私たちの手の中の残りのキャンディの数が足りなくても(前回のキャンディより多くなくても)、これらのキャンディはすべて現在の子供に配布されます.
長さ
例1:
例2:
ヒント:
問題を解く構想.
この問題は非常に簡単で、具体的な論理は実現コードと関連注釈を表示すればよい.
インプリメンテーションコード
Weekly Contest 143の分糖類II
並んで座って、キャンディを分けます.
私たちはキャンディ
candies
を買って、列に並んでいるn = num_people
人の子供に分けようとしました.最初の子供に
1
粒のキャンディをあげ、2番目の子供に2
粒をあげ、それによって最後の子供にn
粒のキャンディをあげるまで押します.それから、私たちは再びチームの起点に戻って、最初の子供に
n + 1
粒のキャンディをあげて、2番目の子供にn + 2
粒をあげて、このように押して、最後の子供に2 * n
粒のキャンディをあげます.上記の手順(毎回前回より1粒多くのキャンディを与え、チームのゴールに着いたら再びチームのスタート地点から)を繰り返して、私たちがすべてのキャンディを分け終わるまで、私たちの手の中の残りのキャンディの数が足りなくても(前回のキャンディより多くなくても)、これらのキャンディはすべて現在の子供に配布されます.
長さ
num_people
、要素の和candies
の配列を返して、キャンディの最終的な配布状況(すなわち、ans[i]
はi
番目の子供が分けたキャンディの数)を表す.例1:
:candies = 7, num_people = 4
:[1,2,3,1]
:
,ans[0] += 1, [1,0,0,0]。
,ans[1] += 2, [1,2,0,0]。
,ans[2] += 3, [1,2,3,0]。
,ans[3] += 1( 1 ), [1,2,3,1]。
例2:
:candies = 10, num_people = 3
:[5,2,3]
:
,ans[0] += 1, [1,0,0]。
,ans[1] += 2, [1,2,0]。
,ans[2] += 3, [1,2,3]。
,ans[0] += 4, [5,2,3]。
ヒント:
1 <= candies <= 10^9
1 <= num_people <= 1000
問題を解く構想.
この問題は非常に簡単で、具体的な論理は実現コードと関連注釈を表示すればよい.
インプリメンテーションコード
/**
* 1104. II
* @param candies
* @param num_people
* @return
*/
public int[] distributeCandies(int candies, int num_people) {
int[] result=new int[num_people];
//
int index=0;
//
int num=1;
while (candies>0){
//
result[index]+=num;
//
candies-=num;
//
if(indexnum){
++num;
}else{
num=candies;
}
}
return result;
}