卡片游戏:
桌上有一叠纸牌,从第一张牌(即位于顶端的牌)开始从上往下依次编号为1~n。当至少还剩两张牌时进行一下操作:把第一张牌扔掉,然后把新的第一张放到整叠牌的最后。
输入n,输出每次扔掉的牌,以及最后剩下的牌。
样例输入:9
样例输出:1 3 5 7 9 4 8 6 2
通过这个例子可以演示C++中队列的机制
/****C++队列的使用*****/
#include<iostream>
#include<queue>
using namespace std;
queue<int>q; //建立队列
int main()
{
int n;
cin>>n;
for(int i=0;i<n;i++)
q.push(i+1); //初始化队列
while(!q.empty())
{
cout<<q.front()<<" ";//打印队首元素
q.pop(); //抛弃队首元素
q.push(q.front()); //把新的队首元素加入队尾
q.pop(); //抛弃队首元素
}
return 0;
}
程序运行结果:
队列和栈是数据结构中很重要的数据存储体,下面演示队列和栈的一个最简单的区别:
/****演示队列和栈的区别***/
#include<iostream>
#include<stack>
#include<queue>
using namespace std;
stack<int>s; //建立栈
queue<int>p; //建立队列
int main()
{
int n;
cin>>n;
for(int i=1;i<=n;i++)
{s.push(i);p.push(i);}//初始化队列和栈
for(int i=1;i<=n;i++)
{
cout<<s.top()<<" ";//输出栈
s.pop();
}cout<<endl;
for(int i=1;i<=n;i++)
{
cout<<p.front()<<" ";//输出队列
p.pop();
}
return 0;
}
程序运行结果:
在编写程序时,调试少不了。而我们如何获得调试用的数据呢?显然,人为的输入一些测试数据显然效率低下,
这里引入C语言中的随机数发生器,用来获得海量的测试数据。
/****演示随机数发生器***/
#include<iostream>
#include<cstdlib> //rand()和srand()需要
#include<ctime> //time()需要的头文件
using namespace std;
int main()
{
int m,r=10;//r是随机数的上界,且随机数不能等于r
double n;
srand(time(0));//只在且只能在函数开始初始化一次
for(int i=0;i<6;i++)//产生6组,每组10个随机数
{
for(int j=0;j<10;j++) //产生10个随机数
{
n=(double)rand()/RAND_MAX;//产生0-1之间的小数
m=(int)(n*(r-1)+0.5);//确保生成的随机数不会大于10
cout<<m<<" ";
}
cout<<endl;
}
return 0;
}
程序结果: