暮色碧水
花朵
共回答了18个问题采纳率:88.9% 举报
初始化队列q中元素为0到n-1(表示虚拟的卡片,意为该下标存放的卡片),然后进行n次操作:把队头元素接到队尾,并移除当前队头元素.
执行完成后堆栈s中存储了一个序列,由于新的卡片序列是0,1,2...n,所以映射回去即可.
#include
//q模拟队列,s模拟堆栈,front,rear分别是队列头尾指标
int n,q[256],s[256],card[256],
front,rear;
//队列上指标移动
void stepback(int *t) //指标后移
{
if(*t==0)*t = n;
else --*t;
}
void stepforward(int *t) //指标前移
{
*t = (*t+1)%n;
}
int main()
{
int i,k;
n = 3; //n张卡片
for(i=0; i
1年前
2