题解 | #火车进站#

火车进站

http://www.nowcoder.com/practice/97ba57c35e9f4749826dc3befaeae109

#include <stdio.h>
#include <stdlib.h>
#include <string.h>

static int sortSeq(const void *a, const void *b)
{
    return strcmp((char *)a, (char *)b);
}

static char g_stack[3][11] = {0}; /* 0,1,2 分别对应未入火车站的火车队列,在火车站中的火车队列,以及出栈后的火车队列 */
static char g_seq[5000][11] = {0};
static int g_num, g_kind = 0;
static void HandleSeq(char idx0, char idx1, char idx2, char in)
{
    if (in) { /* 不为 0 表示进入火车站 */
        if (idx0 >= g_num) return;
        g_stack[1][++idx1] = g_stack[0][idx0++];
        HandleSeq(idx0, idx1, idx2, 0);
        g_stack[1][idx1] = g_stack[0][idx0 - 1];
        HandleSeq(idx0, idx1, idx2, 1);
    } else { /* 当前最后入火车站的火车出战 */
        if (idx2 >= g_num) { strcpy(g_seq[g_kind++], g_stack[2]); return; }
        if (idx1 < 0) return;
        g_stack[2][idx2++] = g_stack[1][idx1--];
        HandleSeq(idx0, idx1, idx2, 0);
        HandleSeq(idx0, idx1, idx2, 1);
        g_stack[1][idx1 + 1] = g_stack[2][idx2 - 1];
    }
}

int main(int argc, char** argv)
{
    scanf("%d", &g_num);
    for (int i = 0; i < g_num; i++) scanf("%hhd", &g_stack[0][i]);
    HandleSeq(0, -1, 0, 1);
    qsort(g_seq, g_kind, sizeof(g_seq[0]), sortSeq);
    for (int i = 0; i < g_kind; i++) {for (int j = 0; j < g_num; j++) {printf("%d ", g_seq[i][j]);} printf("\n");}
    return 0;
}

全部评论

相关推荐

醒工硬件:1学校那里把xxxxx学院去了,加了学院看着就不像本校 2简历实习和项目稍微精简一下。字太多,面试官看着累 3第一个实习格式和第二个实习不一样。建议换行 4项目描述太详细了,你快把原理图贴上来了。比如可以这样描述:使用yyyy芯片,使用xx拓扑,使用pwm控制频率与占空比,进行了了mos/电感/变压器选型,实现了xx功能 建议把技术栈和你做的较为有亮点的工作归纳出来 5熟悉正反激这个是真的吗
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客企业服务