- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
这是一个使用队列模拟教师上类时间的线路的程序。它会产生随机数的学生,给他们每个在办公室花费的随机时间,然后将他们添加到队列中。还应该计算每个学生等待的平均时间,以及办公时间是否超过1个小时。
它也应该运行100次并取所有平均值。
但是,每当我运行它时,等待时间和超过1小时的时间都显示为0,我无法真正弄清楚原因。我敢肯定,这只是我忽略的一些小事情,但出于任何原因,我都无法解决。
谢谢!
让我知道您是否需要我澄清有关我的代码或问题的任何信息。
这是我的代码:
#include <iostream>
#include <ctime> //used for the time(x) function & difftime.
#include <queue>
#include <cmath>
using namespace std;
class Student{
public:
int timeInOffice, arrivalTime, waitTime;
};
int main(){
int numOfStudents;
queue<Student> officeLine;
int avgWaitFinal = 0, avgTimeInOfficeFinal = 0, avgTimeOverFinal = 0;
//avgWaitFinal is the final average wait time
//avgTimeinOfficeFinal is the final average time spent in office
//avgTimeOverFinal is the average time over 1 hour spent in the office.
for (int i=1; i <= 100; i++){
numOfStudents = rand()%10+1;
//This picks a random number of student between 1 and 10
for (int j=0; j < numOfStudents; j++){
Student st;
st.timeInOffice = rand()%10+1;
//this picks a random time spent in the office between 1 and 10 minutes.
st.arrivalTime = time(0);
officeLine.emplace(st);
}
int avgWait = 0, avgTimeInOffice = 0;
time_t officeArrivalTime = time(0);
while (! officeLine.empty()){
Student s = officeLine.front();
s.waitTime = time(0);
avgWait += (int)std::round(difftime(s.waitTime, s.arrivalTime));
avgTimeInOffice += s.timeInOffice;
officeLine.pop();
}
time_t outTime = time(0);
int totalTime = (int)std::round(difftime(outTime, officeArrivalTime));
//this takes the difference between the time the student left and the time they arrived to calculate the total time they spent in the office.
int timeOver = totalTime > 60 ? (totalTime - 60) : 0;
avgTimeOverFinal += timeOver;
avgWait = avgWait/numOfStudents;
avgWaitFinal += avgWait;
avgTimeInOffice = avgTimeInOffice/numOfStudents;
avgTimeInOfficeFinal += avgTimeInOffice;
cout<<"Run #: "<<i<<endl;
cout<<"Number of Students: "<< numOfStudents<<endl;
cout<<"Average Wait Time: "<<avgWait<<endl;
cout<<"Average Visit Time: "<<avgTimeInOffice<<endl;
cout<<"Time Over 1 Hour: "<<timeOver<<endl;
//These are the stats for each individual run of the program
cout<<endl;
}
cout<<"Overall Average Wait Time: "<< (avgWaitFinal/100)<<endl;
cout<<"Overall Average Time in Office: "<< (avgTimeInOfficeFinal/100)<<endl;
cout<<"Overall Average Time Over 1 Hour: "<< (avgTimeOverFinal/100)<<endl;
//these are the final averages of 100 runs
return 0;
}
最佳答案
您可以在设置为difftime
的时间变量之间多次使用time(0)
:它们最终会采用相同的值,因为它们几乎同时被初始化。
因此,我在其中添加了rand()
术语;如果需要,可以更准确地选择这些值。
另外,在while
-loop内,我将s
学生项目更改为指向queue
结构的指针,因此没有创建这些对象的新实例。
在您的问题下的注释中有一个有用的建议:取平均值时保留double
值,然后再将其四舍五入为int
。
这是我的代码修订版:
#include <iostream>
#include <ctime> //used for the time(x) function & difftime.
#include <queue>
#include <cmath>
using namespace std;
class Student{
public:
int timeInOffice, arrivalTime, waitTime;
};
int main(){
int numOfStudents;
queue<Student> officeLine;
int avgWaitFinal = 0, avgTimeInOfficeFinal = 0, avgTimeOverFinal = 0;
//avgWaitFinal is the final average wait time
//avgTimeinOfficeFinal is the final average time spent in office
//avgTimeOverFinal is the average time over 1 hour spent in the office.
for (int i=1; i <= 100; i++){
numOfStudents = rand()%10+1;
//This picks a random number of student between 1 and 10
for (int j=0; j < numOfStudents; j++){
Student st;
st.timeInOffice = rand()%10+1;
//this picks a random time spent in the office between 1 and 10 minutes.
st.arrivalTime = time(0) + rand()%10+1;
officeLine.emplace(st);
}
double avgWait = 0, avgTimeInOffice = 0;
time_t officeArrivalTime = time(0);
while ( !officeLine.empty() ){
Student* s = &officeLine.front();
s->waitTime = time(0);
avgWait += difftime(s->arrivalTime, s->waitTime);
avgTimeInOffice += s->timeInOffice;
officeLine.pop();
}
time_t outTime = time(0) + rand()% 100 + 1;
double totalTime = difftime(outTime, officeArrivalTime);
//this takes the difference between the time the student left and the time they arrived to calculate the total time they spent in the office.
int timeOver = totalTime > 60 ? (totalTime - 60) : 0;
avgTimeOverFinal += timeOver;
avgWait = std::round(avgWait/numOfStudents);
avgWaitFinal += avgWait;
avgTimeInOffice = std::round(avgTimeInOffice/numOfStudents);
avgTimeInOfficeFinal += avgTimeInOffice;
cout<<"Run #: "<<i<<endl;
cout<<"Number of Students: "<< numOfStudents<<endl;
cout<<"Average Wait Time: "<<avgWait<<endl;
cout<<"Average Visit Time: "<<avgTimeInOffice<<endl;
cout<<"Time Over 1 Hour: "<<timeOver<<endl;
//These are the stats for each individual run of the program
cout<<endl;
}
cout<<"Overall Average Wait Time: "<< (avgWaitFinal/100)<<endl;
cout<<"Overall Average Time in Office: "<< (avgTimeInOfficeFinal/100)<<endl;
cout<<"Overall Average Time Over 1 Hour: "<< (avgTimeOverFinal/100)<<endl;
//these are the final averages of 100 runs
return 0;
}
关于c++ - (C++)为什么我的程序没有输出平均等待时间和超过1小时的平均时间?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64283821/
您好,我是使用 xampp 的 PHPmyadmin 新手,没有 MYSQL 背景。当我喜欢研究它是如何工作的时,我的脑海中浮现出一个想法,它让我一周都无法休眠,因为我似乎无法弄清楚如何使用 MIN(
Go docs say (强调): Programs using times should typically store and pass them as values, not pointers.
我有一组用户在 8 月 1 日有一个条目。我想找到在 8 月 1 日有条目但在 8 月 2 日没有做任何事情的用户。 现在是 10 月,所以事件已经过去很久了。 我有限的知识说: SELECT * F
我有以下代码,主要编码和取消编码时间结构。这是代码 package main import ( "fmt" "time" "encoding/json" ) type chec
您能详细解释一下“用户 CPU 时间”和“系统 CPU 时间”吗?我读了很多,但我不太理解。 最佳答案 区别在于时间花在用户空间还是内核空间。用户 CPU 时间是处理器运行程序代码(或库中的代码)所花
应用程序不计算东西,但做输入/输出、读取文件、使用网络。我希望探查器显示它。 我希望像 callgrind 中的东西一样,在每个问题中调用 clock_gettime。 或者像 oprofile 那样
目前我的 web 应用程序接收 websocket 数据来触发操作。 这会在页面重新加载时中断,因此我需要一个能够触发特定事件的客户端解决方案。 这个想法可行吗? 假设你有 TimeX = curre
很难说出这里问的是什么。这个问题是含糊的、模糊的、不完整的、过于宽泛的或修辞性的,无法以目前的形式得到合理的回答。如需帮助澄清此问题以便重新打开它,visit the help center 。 已关
我有一个 Instant (org.joda.time.Instant) 的实例,我在一些 api 响应中得到它。我有另一个来自 (java.time.Instant) 的实例,这是我从其他调用中获得
如何集成功能 f(y) w.r.t 时间;即 'y'是一个包含 3000 个值和值 time(t) 的数组从 1 到 3000 不等。所以,在整合 f(y) 后我需要 3000 个值. 积分将是不确定
可以通过 CLI 创建命名空间,但是如何使用 Java SDK 来创建命名空间? 最佳答案 它以编程方式通过 gRPC API 完成由服务公开。 在 Java 中,生成的 gRPC 客户端可以通过 W
我有一个函数,它接受 2 组日期(开始日期和结束日期),这些日期将用于我的匹配引擎 我必须知道start_date1和end_date1是否在start_date2和end_date2内 快进:当我在
我想从 Python 脚本运行“time”unix 命令,以计算非 Python 应用程序的执行时间。我会使用 os.system 方法。有什么方法可以在Python中保存这个输出吗?我的目标是多次运
我正在寻找一种“漂亮的数字”算法来确定日期/时间值轴上的标签。我熟悉 Paul Heckbert's Nice Numbers algorithm . 我有一个在 X 轴上显示时间/日期的图,用户可以
在 PowerShell 中,您可以格式化日期以返回当前小时,如下所示: Get-Date -UFormat %H 您可以像这样在 UTC 中获取日期字符串: $dateNow = Get-Date
我正在尝试使用 Javascript 向父子窗口添加一些页面加载检查功能。 我的目标是“从父窗口”检测,每次子窗口完全加载然后执行一些代码。 我在父窗口中使用以下代码示例: childPage=wi
我正在尝试设置此 FFmpeg 命令的 drawtext 何时开始,我尝试使用 start_number 但看起来它不会成功。 ffmpeg -i 1.mp4 -acodec aac -keyint_
我收到了一个 Excel (2010) 电子表格,它基本上是一个文本转储。 单元格 - J8 具有以下信息 2014 年 2 月 4 日星期二 00:08:06 EST 单元格 - L8 具有以下信息
我收到的原始数据包含一列具有以下日期和时间戳格式的数据: 2014 年 3 月 31 日凌晨 3:38 单元格的格式并不一致,因为有些单元格有单个空格,而另一些单元格中有两个或三个字符之间的空格。所以
我想知道是否有办法在我的 Grails 应用程序顶部显示版本和构建日期。 编辑:我应该说我正在寻找构建应用程序的日期/时间。 最佳答案 在您的主模板中,或任何地方。 Server version:
我是一名优秀的程序员,十分优秀!