分糖果

题目

一些糖果 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;
  }
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章