

第6题
//编排字符串
//https://www.nowcoder.com/practice/42c0673f04b34f66ae236a1cb7995532
#include<stdio.h>
#include<stdlib.h>
#define MaxSize 5
typedef struct
{
char data[1000];
}ElemType;
typedef struct
{
ElemType data[MaxSize];
int front;
int rear;
}SqQueue;
//初始化队列
void initQueue(SqQueue &qu)
{
qu.front=qu.rear=0;
}
//进队操作
int enQueue(SqQueue &qu,ElemType e)
{
if((qu.rear+1)%MaxSize==qu.front)
return 0;
qu.rear=(qu.rear+1)%MaxSize;
qu.data[qu.rear]=e;
return 1;
}
//出队算法
int deQueue(SqQueue &qu,ElemType &x)
{
if(qu.front==qu.rear)
return 0;
qu.front=(qu.front+1)%MaxSize;
x=qu.data[qu.front];
return 1;
}
//判断队空
int IsEmpty(SqQueue qu)
{
if(qu.front==qu.rear)
return 1;
else
return 0;
}
void Print(SqQueue qu)
{
int i=1;
while(qu.front!=qu.rear)
{
if(qu.front+1==qu.rear)//只存在一个元素的时候
{
printf("%d=%s ",i,qu.data[qu.rear].data);
break;
}
else if(qu.rear==0)//队列中有元素在数组的0号位置
{
printf("%d=%s ",i,qu.data[qu.rear].data);
qu.rear=4;
i++;
}
else
{
printf("%d=%s ",i,qu.data[qu.rear].data);
i++;
qu.rear--;
}
}
printf("\n");
}
int main()
{
int m;
scanf("%d",&m);
ElemType e,x;
SqQueue qu;
initQueue(qu);
while(m--)
{
if((qu.rear+1)%MaxSize!=qu.front)
{
scanf("%s",e.data);
enQueue(qu,e);
Print(qu);
}
else
{
deQueue(qu,x);
scanf("%s",e.data);
enQueue(qu,e);
Print(qu);
}
}
return 0;
}

方法二
#include<iostream>
using namespace std;
int main() {
int m;
char ch[100][20];
cin >> m;
for (int i = 0; i < m; i++)
cin >> ch[i];
for (int i = 0; i < m; i++) {
for (int j = i; j >= 0 && j >= i - 3; j--) //j-i是为了保证永远打印四个。首先用j标记数组最后的位置,不断向前移动。
//永远输出倒数后四个。也就是保证在数组元素超过四个时候,j和i永远相差的3。
cout << i - j + 1 << "=" << ch[j] << " ";
cout << endl;
}
}

927

被折叠的 条评论
为什么被折叠?



