자동차 대기열에 들어가는 차의 확률을 입력해야하는 "자동차 대기열"또는 "세차장"문제의 변형에 대해 작업하고 있습니다. 어떤 주어진 순간에 씻어 낸 다음, 얼마나 많은 차들이 세차 됐는지, 하루가 끝날 때 대기열에 얼마나 많은 차가 남았는지, 얼마나 많은 총 대기 시간이 있었는지를 출력합니다. 저는 C++에 대해 아직 아주 새롭고 지난 몇 개월 동안 광범위하게 사용 해왔습니다. 매우 가능성이 내 큐 구현 코드를 사용하여 catch하지 않은 오류가 있지만 오류가 주 믿습니다. 현재 모든 루프마다 출력을 추가 했으므로 코드를 실행 한 다음 볼 수 있습니다. 그것은 자동차를 받아 들인 후 곧바로 세탁을 마친 것으로 보입니다. 그런 다음 자동차가 없으면 세탁 및 대기 루프 사이를 교대로 전환합니다. 어떤 도움이라도 대단히 감사하겠습니다.자동차 세탁 대기열 문제
#include <assert>
#include <iostream>
#include <fstream>
#include <ostream>
#include <ctime>
#include <cstdlib>
using namespace std;
class Node
{
private:
int item;
Node * next;
public:
Node();
Node (const int& anItem);
Node (const int& anItem, Node * nextNodePtr);
void setItem (const int& anItem);
void setNext (Node * nextNodePtr);
int getItem();
Node* getNext();
};
class LinkedQueue
{
private:
Node* backPtr;
Node* frontPtr;
public:
bool isEmpty();
bool enqueue(int& newEntry);
bool dequeue();
int peekFront() const;
LinkedQueue();
~LinkedQueue();
LinkedQueue(const LinkedQueue& aQueue);
};
int main()
{
srand(1);
int timeForWash;
int minute;
int timeEnteredQueue;
int carsWashed;
int totalQueueMin;
int timeLeftOnCar;
int probOfArrival;
int carsInQueue = 0;
LinkedQueue carQueue;
cout << "Enter time to wash one car:" << endl;
cin >> timeForWash;
cout << endl;
cout << "Enter probability of arrival per minute" << endl;
cin >> probOfArrival;
carsWashed = 0;
totalQueueMin = 0;
timeLeftOnCar = 0;
for (minute = 1; minute <= 20; ++minute)
{
if (rand()%100 <= probOfArrival)
{
carQueue.enqueue(minute);
carsInQueue++;
cout << "Queued" << endl;
}
if ((timeLeftOnCar == 0) && (!carQueue.isEmpty()))
{
timeEnteredQueue = carQueue.peekFront();
carQueue.dequeue();
totalQueueMin = totalQueueMin + (minute - timeEnteredQueue);
++carsWashed;
carsInQueue--;
timeLeftOnCar = timeForWash;
cout << "Finish" << endl;
}
if (timeLeftOnCar =! 0)
{
timeLeftOnCar -= 1;
cout << "Washing" << endl;
}
if ((timeLeftOnCar == 0) && (carQueue.isEmpty()))
{
cout << "Waiting" << endl;
}
}
cout << carsWashed << endl;
cout << totalQueueMin << endl;
cout << carsInQueue << endl;
system("pause");
return(0);
};
//Implementation
Node:: Node() : next (nullptr)
{
} // default
Node:: Node (const int& anItem) : item(anItem), next(nullptr)
{
}
Node:: Node (const int& anItem, Node * nextNodePtr) : item(anItem), next(nextNodePtr)
{
}
void Node:: setItem (const int& anItem)
{
item = anItem;
}
void Node:: setNext (Node * nextNodePtr)
{
next = nextNodePtr;
}
int Node:: getItem()
{
return item;
}
Node * Node:: getNext()
{
return next;
}
bool LinkedQueue::enqueue(int& newEntry)
{
Node* newNodePtr = new Node(newEntry);
//Insert the new node
if (isEmpty())
frontPtr = newNodePtr; // The queue was empty
else
backPtr->setNext(newNodePtr); // The queue was not empty
backPtr = newNodePtr; // New node is at back
return true;
} // end enqueue
bool LinkedQueue::dequeue()
{
bool result = false;
if (!isEmpty())
{
// Queue is not empty; remove front
Node* nodeToDeletePtr = frontPtr;
if (frontPtr == backPtr)
{ // Special case: one node in queue
frontPtr = nullptr;
backPtr = nullptr;
}
else
frontPtr = frontPtr->getNext();
// Return deleted node to system
nodeToDeletePtr->setNext(nullptr);
delete nodeToDeletePtr;
nodeToDeletePtr = nullptr;
result = true;
} // end if
return result;
} // end dequeue
bool LinkedQueue:: isEmpty()
{
return (frontPtr == nullptr);
}
int LinkedQueue:: peekFront() const
{
return frontPtr->getItem();
}
LinkedQueue::LinkedQueue()
{
frontPtr = nullptr;
backPtr = nullptr;
}
LinkedQueue::LinkedQueue(const LinkedQueue& aQueue) :
frontPtr(aQueue.frontPtr)
{
} // end copy constructor
LinkedQueue::~LinkedQueue()
{
} // end destructor
Sigh. 그것의 항상 가장 사소한 것들. 고맙습니다. 바로 그걸 정리 한 것 같아. – Drew
@Drew 컴파일러의 경고 수준을 높이는 것이 좋습니다. 이 같은 것들을 대단히 도움이됩니다 (그들은 당신 자신의 코드에서 발견하는 것이 거의 불가능합니다). – molbdnilo