C++程序:求解保持75%出勤率所需最少上课次数


在这个问题中,我们得到两个数字M和N,分别表示截止到目前为止已上课的总次数和学生已上的课的次数。我们的任务是创建一个C++程序,来计算为了保持75%的出勤率所需最少上课次数。

问题描述

保持75%的出勤率是大学生们最关心的问题之一。本程序计算学生为了达到75%的出勤率而需要定期参加的最少课程次数。

让我们来看一个例子来理解这个问题:

示例1

输入:M = 32, N = 20

输出: 16

解释

为了达到至少75%的出勤率,学生必须至少再上16节课。这样总课程数为48,已上课程数为36。

百分比 = 36*100/48 = 75%

示例1

输入:M = 14, N = 4

输出: 26

解释

为了达到至少75%的出勤率,学生必须至少再上26节课。这样总课程数为40,已上课程数为30。

百分比 = 30*100/40 = 75%

解决方案

这里,我们需要找到学生需要上的课程数量。一种简单的方法是在两边都加一节课,当除法结果大于等于0.75时停止添加并返回迭代器的值。

程序演示了我们解决方案的工作原理:

示例

 在线演示

#include <iostream>
using namespace std;
int maintainAtt(int M, int N) {
   int att = 0; while(1){
      if(((N+att)*100)/(M+att) >= 75){
         return att;
      }
      att++;
   }
}
int main() {
   int M = 23, N = 12;
   cout<<"The total number of lectures to be attended is "<<maintainAtt(M, N);
   return 0;
}

输出:

The total number of lectures to be attended is 21

这种方法使用循环,使得解决方案的时间复杂度为O(n)。但是我们可以使用数学公式来计算次数,从而达到O(1)的时间复杂度。

保持75%出勤率所需最少上课次数的公式为

$$\square\square\square\square\left(\frac{(0.75M-N)}{0.25}\right)$$

程序演示了我们解决方案的工作原理:

示例

 在线演示

#include <iostream>
#include <math.h>
using namespace std;
int maintainAtt(int M, int N) {
   int att = ceil(((0.75*M) - N)/(0.25)); return att;
}
int main() {
   int M = 30, N = 11;
   cout<<"The total number of lectures to be attended is "<<maintainAtt(M, N);
   return 0;
}

输出

The total number of lectures to be attended is 46

更新于:2020年10月9日

1K+浏览量

开启你的职业生涯

完成课程获得认证

开始学习
广告