1.题目:
Problem Description
现有一长度为n的整数序列和一最大容量为m的循环队列(用长为m+1的一维数组实现),要求将该序列中的偶数存入循环队列中;当循环队列满时,将循环队列中的所有元素全部出队,并按存入的先后顺序在同一行内依次输出,即每行输出m个元素,每个元素后输出一个空格。
Input
有多组数据,每组第一行为整数序列的个数n和循环队列的最大容量m(m<=n<=100,0<m<10);第二行为整数序列的各个元素。
Output
有多行数据,先输出对应行号,每行输出m个元素,均为偶数,每个元素后输出一个空格。
Sample Input
10 4
9 10 2 7 16 8 12 4 3 1
10 3
9 10 2 7 16 8 12 1 3 4
Sample Output
1:10 2 16 8
1:10 2 16
2:8 12 4
2.参考代码:
第一种方法:循环队列做的
#include <iostream>
using namespace std;
int n,m;
class CirQueue{
private:
int data[111];
int front,rear;
public:
CirQueue(){ ///构造函数,头指针和尾指针都初始化为0,并初始化数组
front=rear=0;
memset(data,0,sizeof(data));
}
~CirQueue(){ ///析构函数为空
}
void EnQueue(int x){ ///入队操作
if(!full()){ ///若队列不为空
rear%=m; ///先求模
data[rear++]=x; ///入队
}
}
int DeQueue(){ ///出队操作
if(!empty()){ ///若队列不为满
front%=m; ///先求模
return data[front++]; ///出队
}
}
bool full(){ ///判满操作
if(rear==m)
return true;
else
return false;
}
bool empty(){ ///判空操作
if(rear==front)
return true;
else
return false;
}
void show(int id,int value){ //输出操作
cout<<id++<<":";
while(!empty())
cout<<DeQueue()<<" ";
cout<<endl;
rear=front=0; ///初始化队列
if(value!=-1)
EnQueue(value);
}
};
int main()
{
while(cin>>n>>m){
CirQueue cq;
int id=1,value; ///id是计算是第几行的
while(n--){
cin>>value;
if(value&1) ///若为奇数则继续
continue;
else{ ///否则为偶数
if(!cq.full()) ///队列不满
cq.EnQueue(value); ///就入队
else ///否则满
cq.show(id++,value); ///输出
}
}
if(cq.full())
cq.show(id++,-1);
}
return 0;
}
第二种方法:普通方法
#include <iostream>
using namespace std;
int main()
{
int i,n,m,a[1111],b[1111],count,j,k;
while(cin>>n>>m)
{
k=1;
count=0;
for(i=0;i<n;i++)
cin>>a[i];
for(j=0,i=0;i<n;i++)
{
if(a[i]%2==0)
{
count++;
b[j++]=a[i];
if(count%m==0)
{
cout<<k++<<":";
for(int t=0;t<m;t++)
cout<<b[t]<<" ";
cout<<endl;
j=0;
}
}
}
}
return 0;
}