题目网址:NSWOJ-1090(外网好像进不去,大家可以去vjudge交,可能会有)
时间限制: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; } } }