【C++ Primer Plus习题】12.5

news2024/9/21 4:33:02

大家好,这里是国中之林!
❥前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住分享一下给大家。点击跳转到网站。有兴趣的可以点点进去看看←

问题:

这里是引用
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

解答:
main.cpp

#include <iostream>
#include <cstdlib>
#include <ctime>
#include "queue.h"

using namespace std;

const int MIN_PER_HR = 60;
const int MIN_SIM_HOURS = 150;

bool newcustomer(double x);

int main()
{
	srand(time(0));
	cout << "研究案例:Heather银行自动柜员机\n";
	cout << "请输入队列的最大人数: ";
	int qs;
	cin >> qs;
	Queue line(qs);
	/*cout << "请输入模拟小时数:";
	int hours;
	cin >> hours;*/
	cout << "模拟时间要大于等于100." << endl;
	int hours = MIN_SIM_HOURS;//这里就固定为150;
	long cyclelimit = MIN_PER_HR * hours;

	//cout << "请输入平均每个小时的顾客数量:";
	//double perhour;
	//cin >> perhour;
	//double min_per_cust;//每个客服到达的平均分钟数.
	//min_per_cust = MIN_PER_HR / perhour;//到达一个客户的平均时间

	double perhour = 0;
	Item temp;
	double average_wait = 0;

	while (average_wait<1)
	{
		double min_per_cust;
		long turnaways = 0;
		long customers = 0;
		long served = 0;
		long sum_line = 0;
		int wait_time = 0;
		long line_wait = 0;
		perhour++;
		if (!line.isempty())line.dequeue(temp);//下次进入前清空队列

		for (int cycle = 0; cycle < cyclelimit; cycle++)
		{
			min_per_cust = MIN_PER_HR / perhour;
			if (newcustomer(min_per_cust))
			{
				if (line.isfull())turnaways++;
				else
				{
					customers++;
					temp.set(cycle);
					line.enqueue(temp);
				}
			}
			if (wait_time <= 0 && !line.isempty())
			{
				line.dequeue(temp);
				wait_time = temp.ptime();
				line_wait += cycle - temp.when();
				served++;
			}
			if (wait_time > 0)wait_time--;
			sum_line += line.queuecount();
		}

		average_wait = (double)line_wait / served;
		if (average_wait < 1)
		{
			if (customers > 0)
			{
				cout << "接受顾客数为:" << customers << endl;
				cout << "服务顾客数为:" << served << endl;
				cout << "turnaways:" << turnaways << endl;
				cout << "平均每分钟的队列长度: ";
				cout.precision(2);
				cout.setf(ios_base::fixed, ios_base::floatfield);
				cout << (double)sum_line / cyclelimit << endl;
				cout << "每个顾客平均排队等待时间: " << (double)line_wait / served << " 分钟\n";
			}
			else
				cout << "No customers!\n";
			cout << "The average " << perhour << " of arrival per hour,and average wait time is" << average_wait << endl<<endl;
		}

	}

	cout << "Done!" <<endl;
	return 0;
}

bool newcustomer(double x)
{
	return (rand() * x / RAND_MAX < 1);
}

queue.h

#pragma once
class Customer
{
private:
	long arrive;//顾客到达的时间
	int processtime;//顾客办事的时间
public:
	Customer() { arrive = processtime = 0; }

	void set(long when);
	long when()const { return arrive; }
	int ptime()const { return processtime; }
};

typedef Customer Item;

class Queue
{
private:
	struct Node { Item item; struct Node* next; };
	enum {Q_SIZE=10};

	Node* front;
	Node* rear;
	int items;
	const int qsize;
	Queue(const Queue&q):qsize(0){}
	Queue& operator=(const Queue& q) { return *this; }

public:
	Queue(int qs=Q_SIZE);
	~Queue();
	bool isempty()const;
	bool isfull()const;
	int queuecount()const;
	bool enqueue(const Item& item);
	bool dequeue(Item& item);
};




queue.cpp

#include "queue.h"
#include <cstdlib>


Queue::Queue(int qs):qsize(qs)
{
	front = rear = NULL;
	items = 0;
}
Queue::~Queue()
{
	Node* temp;
	while (front!=NULL)
	{
		temp = front;
		front = front->next;
		delete temp;
	}
}
bool Queue::isempty()const
{
	return items == 0;
}
bool Queue::isfull()const
{
	return items == qsize;
}
int Queue::queuecount()const
{
	return items;
}
bool Queue::enqueue(const Item& item)
{
	if (isfull())return false;
	Node* node = new Node;
	node->item = item;
	node->next = NULL;
	items++;
	if (front == NULL)
	{
		front = node;
	}
	else
	{
		rear->next = node;
	}
	rear = node;
	return true;
}
bool Queue::dequeue(Item& item)
{
	if (isempty())return false;
	item = front->item;
	items--;
	Node* temp = front;
	front = front->next;
	delete temp;
	if (items == 0)
	{
		rear == NULL;
	}
	return true;
}

void Customer::set(long when)
{
	processtime = rand() % 3 + 1;
	arrive = when;
}

运行结果:
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

考查点:

  • 数据结构队列

不懂的地方问我吧…在这里插入图片描述

2024年9月8日15:48:39

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2115843.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Linux-【组管理、权限管理、定时任务调度】

目录 前言 Linux组基本介绍 文件/目录 所有者 查看文件 所有者 修改文件所有者 文件/目录 所在组 修改文件/目录 所在组 其它组 改变用户所在组 权限的基本介绍 rwx权限 rwx作用到文件 rwx作用到目录 修改权限 第一种方式&#xff1a;、-、变更权限 第二种方式…

Java进阶13讲__第11讲

配置文件 日志 1. Properties属性文件 1.1 特点、作用 都只能是键值对键不能重复文件后缀一般是.properties结尾的 1.2 读取 package cn.hdc.oop10.properties;import java.io.FileNotFoundException; import java.io.FileReader; import java.util.Properties; import j…

「iOS」折叠cell

iOS学习 前言简单的折叠cell效果原理 稍作修改总结 前言 在暑期仿写中&#xff0c;3G share项目里我们简单的使用了折叠cell。现在写一篇博客来总结该方法。 简单的折叠cell 效果 先看效果&#xff1a; 原理 将cell的高度设置为一个单元格的高度。创建一个按钮&#xff0…

【C++】作用域指针、智能指针、共享指针、弱指针

十、智能指针、共享指针 从上篇文章 【C】如何用C创建对象&#xff0c;理解作用域、堆栈、内存分配-CSDN博客 中我们知道&#xff0c;你的对象是创建在栈上还是在堆上&#xff0c;最大的区别就是对象的作用域不一样。所以在C中&#xff0c;一旦程序进入另外一个作用域&#xf…

【xinference】(19):在L40设备上通过Xinference框架,快速部署CogVideoX-5b模型,可以生成6秒视频,速度比409D快一点

1&#xff0c;关于Xinference Xorbits Inference (Xinference) 是一个开源平台&#xff0c;用于简化各种 AI 模型的运行和集成。借助 Xinference&#xff0c;您可以使用任何开源 LLM、嵌入模型和多模态模型在云端或本地环境中运行推理&#xff0c;并创建强大的 AI 应用。 htt…

鸿蒙开发笔记_电商严选01_登录页面(静态页面)

由于上班较忙,抽空闲暇时间,快速更新中。。。 效果图 登录页面(静态页面) import CommonConstants from ./CommonConstants;/*** 登录页面*/ // 输入文本框,的自定义样式扩展 // @Extend装饰器表示继承、扩展的意思。这里代表:自定义样式扩展 @Extend(TextInput) functio…

Qt使用小技巧之按钮动态变化

前言 最近写小demo中无意发现的&#xff0c;是想实现当鼠标悬停到按钮上面的时候&#xff0c;按钮实现动态变化&#xff0c;让人知道鼠标经过了按钮&#xff0c;效果如下 hoverDynamicPushButton 正文 首先是将按钮的边框给去掉&#xff0c;然后设置下它的悬停伪状态就行了 格…

linux日常使用命令总结

一、文件复制 在 Linux 中&#xff0c;复制文件是一个常见的操作&#xff0c;通常使用 cp 命令来完成。cp 命令提供了丰富的选项来满足不同的需求。下面是使用 cp 命令复制文件的一些基本用法和示例。 基本用法 cp 命令的基本语法如下&#xff1a; cp [选项] 源文件 目标文…

京东获得JD商品详情 API 返回值说明||京东商品详情数据采集API接口详解

item_get-获得JD商品详情 公共参数 名称类型必须描述keyString是调用key&#xff08;必须以GET方式拼接在URL中&#xff09;secretString是调用密钥api_nameString是API接口名称&#xff08;包括在请求地址中&#xff09;[item_search,item_get,item_search_shop等]cacheStri…

了解分布式事务与本地事物基本概念

一、本地事物 1、事物的基本性质 数据库事物的几个特性&#xff1a;原子性、一致性、隔离性、持久性&#xff0c;简称ACID&#xff1b; 原子性&#xff1a;一系列的操作整体不可拆分&#xff0c;要么全成功&#xff0c;要么同时失败。 一致性&#xff1a;数据在事物的前后&am…

SpringMVC上

SpringMVC介绍 MVC模型 MVC全称Model View Controller&#xff0c;是一种设计创建Web应用程序的模式。这三个单词分别代表Web应用程序的三个部分&#xff1a; Model&#xff08;模型&#xff09;&#xff1a;指数据模型。用于存储数据以及处理用户请求的业务逻辑。在Web应用…

Typora教程

1 TyporaChina https://typorachina.com/guide/

【C语言必学知识点七】坚决不允许你还不知道C/C++程序如何对内存进行分区!!!

动态内存管理——详细解读C/C程序中的内存分区 导读一、C/C程序中的内存分区二、常见的动态内存的错误2.1 内存开辟失败后对空指针进行解引用2.2 对已开辟好的空间进行越界访问2.3 free不是有动态函数开辟的空间2.4 free动态内存开辟空间的一部分2.4.1 free函数的底层逻辑 2.5 …

【HarmonyOS】- 内存优化

文章目录 知识回顾前言源码分析1. onMemoryLevel2. 使用LRUCache优化ArkTS内存原理介绍3. 使用生命周期管理优化ArkTS内存4. 使用purgeable优化C++内存拓展知识1. Purgeable Memory总结知识回顾 前言 当应用程序占用过多内存时,系统可能会频繁进行内存回收和重新分配,导致应…

Excel文档的读取【2】

读取了工作簿对象后&#xff0c;下一步就是读取指定的工作表。每个工作簿中&#xff0c;都包含一个或多个工作表。每个工作表&#xff0c;都有一个名称。阿珍收到的Excel文件&#xff0c;由两个工作表组成&#xff0c;分别为“销售商品”和“销售订单数据”。 使用print输出…

基于移动互联网的校内物业报修管理系统设计与实现(论文+源码)_kaic

基于移动互联网的校内物业报修管理系统设计与实现 摘  要 校园后勤服务对于学校的发展至关重要&#xff0c;它不仅是学校管理的基石&#xff0c;也是实现教育目标的关键因素&#xff0c;为学生提供优质的生活环境。如果学校能够提供出色的后勤保障&#xff0c;让师生无需担心…

【生日视频制作】保时捷车主提车交车仪式感AE模板修改文字软件生成器教程特效素材【AE模板】

生日视频制作教程保时捷车主提车交车仪式感AE模板修改文字特效广告生成神器素材祝福玩法AE模板工程 怎么如何做的【生日视频制作】保时捷车主提车交车仪式感AE模板修改文字软件生成器教程特效素材【AE模板】 生日视频制作步骤&#xff1a; 下载AE模板 安装AE软件 把AE模板导入…

240908-Linux通过ln设置软链接关联大模型文件

在Linux中&#xff0c;您可以使用ln命令来创建软链接&#xff08;符号链接&#xff09;。软链接是一种特殊类型的文件&#xff0c;它指向另一个文件或目录。以下是如何设置软链接的步骤&#xff1a; 创建软链接 基本语法&#xff1a; ln -s [目标文件或目录] [软链接的名称]示…

【SpringBoot】电脑商城-12-订单功能

创建订单 1 订单-创建数据表 1.使用use命令先选中store数据库。 USE store;2.在store数据库中创建t_order和t_order_item数据表。 CREATE TABLE t_order (oid INT AUTO_INCREMENT COMMENT 订单id,uid INT NOT NULL COMMENT 用户id,recv_name VARCHAR(20) NOT NULL COMMENT …

碎碎念,只是一些关于人工智能的随笔记录。

&#x1f96e;随笔 本篇将毫无逻辑&#xff0c;只是写到哪儿算哪儿&#xff0c;只是用来记录着玩儿。 关键学习期的概念 关键学习期&#xff08;Critical Learning Periods&#xff09;是一个在生物学和人工智能领域都有研究的概念。在生物学中&#xff0c;关键学习期指的是…