📜  在N个男孩中分发了C个糖果,因此收到的最大和最小糖果之间的差为K

📅  最后修改于: 2021-04-17 18:43:18             🧑  作者: Mango

给定两个整数NC (代表男孩和糖果的数量)和整数K ,任务是计算任何男孩接收的最大和最小糖果数量,以使它们之间的差为K。

例子:

方法:可以根据以下观察结果解决给定问题:

  1. 如果K> = C:所有C糖果都可以分配给第一个男孩。因此,糖果的最大数量为C ,最小数量为0
  2. 否则,将糖果分发给男孩,使最大和最小计数保持≤K。

请按照以下步骤解决问题:

  1. 初始化两个变量,例如最大最小,以存储男孩可以拥有的最大和最小糖果数。
  2. 如果N = 1:设置最大值= C最小值= C
  3. 如果K> = C:设置最大值= C最小值= 0
  4. 否则,如果K ,则将最大值= K并将最小值= 0设置。现在,请按照以下步骤操作:
    1. 初始化一个变量,例如remain_candy,并将其设置为C –K。
    2. 将( remain_candy / N )加到最大值最小值
    3. 如果( rest_candy%N == N-1 ),则增加最小值
  5. 打印最小值最大值

下面是上述方法的实现:

C++
// C++ program for
// the above approach
#include 
using namespace std;
  
// Function to calculate the
// maximum and minimum number
// of candies a boy can possess
int max_min(int N, int C, int K)
{
    int maximum, minimum;
  
    if (N == 1) {
  
        // All candies will be
        // given to one boy
        maximum = minimum = C;
    }
  
    else if (K >= C) {
  
        // All the candies will
        // be given to 1 boy
        maximum = C;
        minimum = 0;
    }
  
    else {
  
        // Give K candies to 1st
        // boy initially
        maximum = K;
        minimum = 0;
  
        // Count remaining candies
        int remain_candy = C - K;
  
        maximum += remain_candy / N;
        minimum = remain_candy / N;
  
        // If the last candy of remaining candies
        // is given to the last boy, i.e Nth boy
        if (remain_candy % N == N - 1) {
  
            // Increase minimum count
            minimum++;
        }
    }
  
    cout << "Maximum = " << maximum
         << endl;
    cout << "Minimum = " << minimum;
  
    return 0;
}
  
// Driver Code
int main()
{
    int N = 4;
    int C = 12;
    int K = 3;
  
    max_min(N, C, K);
  
    return 0;
}


输出:
Maximum = 5
Minimum = 2

时间复杂度: O(1)
辅助空间: O(1)