分糖果

題目

一些糖果 candies,分給排好隊的 n = num_people 個小朋友。給第一個小朋友 1 顆糖果,直到給最後一個小朋友 n顆糖果。然後,我們再回到隊伍的起點,給第一個小朋友 n + 1 顆糖果,依此類推,直到給最後一個小朋友 2 * n 顆糖果,直到糖果分完。
題目來源:https://leetcode-cn.com/problems/distribute-candies-to-people/

解題思路

1.判讀小朋友的個數,若小於或等於0,不發糖果,返回null
2.若不爲空,獲取給第一個小朋友糖果的次數,
3.由於每個小朋友每次獲得的糖果數之間滿足等差隊列
4.獲得在最後一次到達第一個小朋友前剩餘的糖果
5.獲得每個小朋友獲得的糖果數

解答

測試代碼

import java.util.Scanner;
public class tanguo {
tanguo t=new tanguo();
Scanner s=new Scanner(System.in);
System.out.println("請輸入糖果數:");
int candies=s.nextInt();
System.out.println("請輸入人數:");
int num_people=s.nextInt();
t.distributeCandies(candies,num_people);
    }

主要代碼

  public int[] distributeCandies(int candies, int num_people) {
//若第一輪每個小朋友都分到糖果,則需要糖果爲2*(n+1)/2
//第一輪剩餘糖果數爲candies-()2*(n+1)/2)
//需要的num輪爲candies-(2*(n+1)/2)*(num)+(num-1)*(num_people*num_people))
//設置需要num輪,需要第n個小朋友獲得的糖果數爲n+num_people*(num-1)
        if(num_people<=0){
            return null;
        }
        int a[]=new int[num_people];
        int num=numCi(candies,num_people);
        //在第n-1輪後剩餘的糖數位 candies-(2*(num_people+1))/2)*(num-1)+Math.pow(num_people,num-2);
        int x= (int) (candies-((num-1)*(num_people))*(((num-1)*(num_people))+1)/2);
//第一個孩子在n輪最多可分糖數爲num*1+num_people*(num-1)
       // int b=0;
        int c=0;
        for(int j=0;j<num_people;j++){
            int i=j+1;
            c=i+(num_people*(num-1));
            if(x>0)
            {
                if(x-c>0){
                    int b=(num-1)*((num-2));
                    //int d=b*num_people;
                    a[j]=(((num-1)*i)+((b*num_people)/2)+c);
                    x=x-c;
                }
                 else{
        int b=(num-1)*((num-2));
      //  int d=b*num_people;
        a[j]=(((num-1)*i)+((b*num_people)/2)+x);
        x=0;
    }
}
else{
    int b=(num-1)*((num-2));
        a[j]=(((num-1)*i)+((b*num_people)/2));
        }
       System.out.println(a[j]);
    }

        return a;
}
 public int numCi(int candies, int num_people )//7,4
    {     int num=0;
        int lessCandies=0;//糖數
        while(lessCandies<candies)
        {
            num++;
            lessCandies= (int) (((num)*(num_people))*(((num)*(num_people))+1)/2);
        }
       // System.out.println(num);
        return num;
  }
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章