大家帮忙找找问题吧(队列问题)

lihorse_1043 2008-09-25 02:55:27
程序目的是计算在输入时间内服务了多少个顾客。
随机数产生0,1,2,3(顾客数)
如果是0,3不向队列中安排顾客
如果是1,向队列中安排一个顾客
如果是2,向队列中安排两个顾客
checkout假定每分钟可以服务一个顾客
最后输出在输入时间内服务了多少个顾客
顾客最长等待时间是多少
平均服务时间是多少

但是我的程序不能运行,大家帮帮找找问题吧,谢谢了


#include<cstdlib>
#include<iostream>
using namespace std;

struct Node {
int data; // data is the time how long the customer stay in the queue
Node *next;
};

void print_info(); //display name,id and assignment number
void insert_n(Node *head, int num); //insert coutomers to the queue
void travel_n(Node *head); //time counter plus one when each customer leave the checkout
int dele_n(Node *head); // remove a customer from the queue

void insert_n(Node *head, int num){
Node * temp, * tempe;
int i;
temp=head;
for(i=1;i<=num;++i)
{
while(temp)
{
temp=temp->next;
}
tempe=new Node;
tempe->data=0;
temp->next=NULL;
travel_n(head);
}
}

void travel_n(Node *head){
Node * temp;
temp=head;
while(temp)
{
temp->data=temp->data+1;
temp=temp->next;
}
}

int dele_n(Node *head){
int wait_time;
Node * temp;
temp=head;
wait_time=temp->data;
temp=temp->next;
head=temp;
travel_n(head);
return wait_time;
}

int main()
{
Node *head=NULL;
Node temp,end;
int ser_num=0,cus_num=0,i;
float time,averaget,longestt=0,tempt;
cout<<"Start of the simulation program"<<endl;
cout<<"Enter the length of time to run the simulator : ";
cin>>time;
cout<<endl;
for(i=0;i<time;++i)
{
switch(rand()%4)
{
case 1 :
if(head==NULL)
{
insert_n(head, 1);
cus_num=cus_num+1;
}else
{
tempt=dele_n(head);
if(longestt<tempt)
longestt=tempt;
time=time+tempt;
ser_num++;
insert_n(head,1);
cus_num=cus_num+1;
}

case 2 :
if(head==NULL)
{
insert_n(head, 2);
cus_num=cus_num+1;
}else
{
tempt=dele_n(head);
if(longestt<tempt)
longestt=tempt;
time=time+tempt;
ser_num++;
insert_n(head,2);
cus_num=cus_num+2;
}
case 0 :
if(head)
tempt=dele_n(head);
if(longestt<tempt)
longestt=tempt;
time=time+tempt;
ser_num++;
case 3 :
if(head)
tempt=dele_n(head);
if(longestt<tempt)
longestt=tempt;
time=time+tempt;
ser_num++;
}
}
averaget=time/ser_num;
cout<<"Customers served : "<<ser_num<<endl;
cout<<"Average wait : "<<averaget<<endl;
cout<<"Longest wait : "<<longestt<<endl;
return 0;
}
...全文
140 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
lihorse_1043 2008-09-25
  • 打赏
  • 举报
回复
#include <cstdlib>
#include <iostream>
using namespace std;

struct Node {
int data; // data is the time how long the customer stay in the queue
Node *next;
};

void print_info(); //display name,id and assignment number
void insert_n(Node *head, int num); //insert coutomers to the queue
void travel_n(Node *head); //time counter plus one when each customer leave the checkout
int dele_n(Node *head); // remove a customer from the queue

void insert_n(Node *head, int num){
Node * temp, * tempe;
int i;
temp=head;
for(i=1;i <=num;++i)
{
while(temp->next)//这里要改
{
temp=temp->next;
}
tempe=new Node;
tempe->data=0;
temp->next=tempe;//增加一个顾客在队列里
travel_n(head);
}
}

void travel_n(Node *head){
Node * temp;
temp=head;
while(temp)
{
temp->data=temp->data+1;
temp=temp->next;
}
}

int dele_n(Node *head){
int wait_time;
Node * temp;
temp=head;
wait_time=temp->data;
temp=temp->next; //这里有内存泄漏,先把temp->next 转移到一个临时变量,然有释放temp
head=temp;
travel_n(head);
return wait_time;
}

int main()
{
Node *head=NULL;
Node temp,end;
int ser_num=0,cus_num=0,i;
float time,averaget,longestt=0,tempt; //time 定义成浮点形,下面循环又用整形来判断???
//因为最后我要求平均时间要保留一位小数,所以把时间定义成浮点型的
cout < <"Start of the simulation program" < <endl;
cout < <"Enter the length of time to run the simulator : ";
cin>>time;
cout < <endl;
for(i=0;i <time;++i)
{
switch(rand()%4)
{
case 1 :
if(head==NULL)
{
insert_n(head, 1);
cus_num=cus_num+1;
}else
{
tempt=dele_n(head);
if(longestt <tempt)
longestt=tempt;
time=time+tempt;
ser_num++;
insert_n(head,1);
cus_num=cus_num+1;
}

case 2 :
if(head==NULL)
{
insert_n(head, 2);
cus_num=cus_num+1;
}else
{
tempt=dele_n(head);
if(longestt <tempt)
longestt=tempt;
time=time+tempt;
ser_num++;
insert_n(head,2);
cus_num=cus_num+2;
}
case 0 :
if(head)
tempt=dele_n(head);
if(longestt <tempt)
longestt=tempt;
time=time+tempt;
ser_num++;
case 3 :
if(head)
tempt=dele_n(head);
if(longestt <tempt)
longestt=tempt;
time=time+tempt;
ser_num++;
}
}
averaget=time/ser_num;
cout < <"Customers served : " < <ser_num < <endl;
cout < <"Average wait : " < <averaget < <endl;
cout < <"Longest wait : " < <longestt < <endl;
return 0;
}

kkndciapp 2008-09-25
  • 打赏
  • 举报
回复
你可以把问题描述得清楚点吗?
看了下,里面问题跟你指出了下
#include <cstdlib> 
#include <iostream>
using namespace std;

struct Node {
int data; // data is the time how long the customer stay in the queue
Node *next;
};

void print_info(); //display name,id and assignment number
void insert_n(Node *head, int num); //insert coutomers to the queue
void travel_n(Node *head); //time counter plus one when each customer leave the checkout
int dele_n(Node *head); // remove a customer from the queue

void insert_n(Node *head, int num){
Node * temp, * tempe;
int i;
temp=head;
for(i=1;i <=num;++i)
{
while(temp->next)//这里要改
{
temp=temp->next;
}
tempe=new Node;
tempe->data=0;
temp->next=tempe;//这里是要做什么
travel_n(head);
}
}

void travel_n(Node *head){
Node * temp;
temp=head;
while(temp)
{
temp->data=temp->data+1;
temp=temp->next;
}
}

int dele_n(Node *head){
int wait_time;
Node * temp;
temp=head;
wait_time=temp->data;
temp=temp->next; //这里有内存泄漏,先把temp->next 转移到一个临时变量,然有释放temp
head=temp;
travel_n(head);
return wait_time;
}

int main()
{
Node *head=NULL;
Node temp,end;
int ser_num=0,cus_num=0,i;
float time,averaget,longestt=0,tempt; //time 定义成浮点形,下面循环又用整形来判断???
cout < <"Start of the simulation program" < <endl;
cout < <"Enter the length of time to run the simulator : ";
cin>>time;
cout < <endl;
for(i=0;i <time;++i)
{
switch(rand()%4)
{
case 1 :
if(head==NULL)
{
insert_n(head, 1);
cus_num=cus_num+1;
}else
{
tempt=dele_n(head);
if(longestt <tempt)
longestt=tempt;
time=time+tempt;
ser_num++;
insert_n(head,1);
cus_num=cus_num+1;
}

case 2 :
if(head==NULL)
{
insert_n(head, 2);
cus_num=cus_num+1;
}else
{
tempt=dele_n(head);
if(longestt <tempt)
longestt=tempt;
time=time+tempt;
ser_num++;
insert_n(head,2);
cus_num=cus_num+2;
}
case 0 :
if(head)
tempt=dele_n(head);
if(longestt <tempt)
longestt=tempt;
time=time+tempt;
ser_num++;
case 3 :
if(head)
tempt=dele_n(head);
if(longestt <tempt)
longestt=tempt;
time=time+tempt;
ser_num++;
}
}
averaget=time/ser_num;
cout < <"Customers served : " < <ser_num < <endl;
cout < <"Average wait : " < <averaget < <endl;
cout < <"Longest wait : " < <longestt < <endl;
return 0;
}
xkyx_cn 2008-09-25
  • 打赏
  • 举报
回复
1.case 语句需要用break
2.函数参数传递用二重指针,达到改变main函数中变量的目的


#include <cstdlib>
#include <iostream>
using namespace std;

struct Node {
int data; // data is the time how long the customer stay in the queue
Node *next;
};

void print_info(); //display name,id and assignment number
void insert_n(Node **head, int num); //insert coutomers to the queue
void travel_n(Node *head); //time counter plus one when each customer leave the checkout
int dele_n(Node **head); // remove a customer from the queue

void insert_n(Node **head, int num){
Node * temp, *tempe;
int i;
temp = *head;
for(i = 1;i <= num; ++i)
{
while(temp)
{
temp=temp->next;
}
tempe=new Node;
tempe->data=0;
tempe->next=NULL;

if ( NULL == temp )
{
*head = temp = tempe;
}

travel_n(*head);
}
}

void travel_n(Node *head){
Node * temp;
temp = head;
while(temp)
{
temp->data = temp->data + 1;
temp = temp->next;
}
}

int dele_n(Node **head){
int wait_time;
Node * temp;
temp = *head;
wait_time=temp->data;
temp = temp->next;
*head = temp;
travel_n(*head);
return wait_time;
}

int main()
{
Node *head=NULL;
//Node temp,end;
int ser_num=0,cus_num=0,i;
float time,averaget,longestt=0,tempt;
cout <<"Start of the simulation program" <<endl;
cout <<"Enter the length of time to run the simulator : ";
cin>>time;
cout <<endl;
for(i=0;i <time;++i)
{
switch(rand()%4)
{
case 1 :
if(head==NULL)
{
insert_n(&head, 1);
cus_num=cus_num+1;
}else
{
tempt=dele_n(&head);
if(longestt <tempt)
longestt=tempt;
time=time+tempt;
ser_num++;
insert_n(&head,1);
cus_num=cus_num+1;
}
break; // case need break
case 2 :
if(head==NULL)
{
insert_n(&head, 2);
cus_num=cus_num+1;
}else
{
tempt=dele_n(&head);
if(longestt <tempt)
longestt=tempt;
time=time+tempt;
ser_num++;
insert_n(&head,2);
cus_num=cus_num+2;
}
break;
case 0 :
if(head)
tempt=dele_n(&head);
if(longestt <tempt)
longestt=tempt;
time=time+tempt;
ser_num++;
break;
case 3 :
if(head)
tempt=dele_n(&head);
if(longestt <tempt)
longestt=tempt;
time=time+tempt;
ser_num++;
break;
}
}
averaget = time/ser_num;
cout <<"Customers served : " <<ser_num <<endl;
cout <<"Average wait : " <<averaget <<endl;
cout <<"Longest wait : " <<longestt <<endl;
return 0;
}
lihorse_1043 2008-09-25
  • 打赏
  • 举报
回复
谢谢大家帮帮忙。

64,643

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧