NowCoder——编排字符串

在这里插入图片描述
在这里插入图片描述

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;
    }
}

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值