题目网址:NSWOJ-1090(外网好像进不去,大家可以去vjudge交,可能会有)
1090 - 通话记录
时间限制:1秒 内存限制:128兆
-
题目描述
-
使用3个队列,分别保留手机上最近10个,(0)未接来电、(1)已接来电、(2)已拨电话。
输入
-
全部通话记录,每行一条记录。
每条记录包含两个数字,第一个数代表记录类型,第二个数代表手机号码。
输出
-
分3列输出未接来电、已接来电、已拨电话。
列之间用空格分割,后接电话在最先输出,不足10条用0占位。
样例输入
-
2 18270477699 1 10149800116 0 19906559817 1 16209018105 1 16804212234 2 19289130583 1 17982711123 0 10897630486 1 11860787674 0 15192777554
样例输出
-
15192777554 11860787674 19289130583 10897630486 17982711123 18270477699 19906559817 16804212234 0 0 16209018105 0 0 10149800116 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
提示
题意:中文题意很简单,就不解释了;不过他给的题目描述我感觉好像有问题,最后接的电话先输出;这应该是栈的用法题目中却说队列,有点不明白;反正我直接用栈就过了,栈为空直接补0就oK;不懂栈的用法的百度一下,先学会用栈的几个函数;
#include<iostream>
#include<cstring>
#include<stack>
using namespace std;
stack <string> q1,q2,q3;
main()
{
char ch;
string a;
while(cin>>ch>>a)
{
if(ch=='0')
{
q1.push(a);
}
else if(ch=='1')
{
q2.push(a);
}
else if(ch=='2')
{
q3.push(a);
}
}
for(int i=0;i<10;i++)
{
if(!q1.empty())
{
a=q1.top();
cout<<a<<" ";
q1.pop();
}
else
{
cout<<"0 ";
}
if(!q2.empty())
{
a=q2.top();
cout<<a<<" ";
q2.pop();
}
else
{
cout<<"0 ";
}
if(!q3.empty())
{
a=q3.top();
cout<<a<<endl;
q3.pop();
}
else
{
cout<<"0"<<endl;
}
}
}