排队点名!

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

int main() {
    int n, m, i, index;
    scanf("%d", &n); 

    int *queue = (int *)malloc(n * sizeof(int)); // 分配内存给队伍数组
    for (i = 0; i < n; i++) {
        scanf("%d", &queue[i]); // 读取初始队伍状态
    }

    scanf("%d", &m); // 读取点名次数
    int *called = (int *)malloc(m * sizeof(int)); // 分配内存给点名数组
    for (i = 0; i < m; i++) {
        scanf("%d", &called[i]); // 读取每次点名编号
    }

    for (i = 0; i < m; i++) {
        int target = called[i]; // 当前被点名学生的编号
        for (index = 0; index < n; index++) {
            if (queue[index] == target) { // 找到被点名学生的位置
                break;
            }
        }

        // 将被点名学生移动到数组前面
        for (int j = index; j > 0; j--) {
            queue[j] = queue[j - 1]; // 后续学生向前移动一个位置
        }
        queue[0] = target; // 将被点名学生放到数组开头
    }

    // 输出最终队伍状态
    for (i = 0; i < n - 1; i++) {
        printf("%d ", queue[i]);
    }
    printf("%d\n", queue[n - 1]); // 注意最后一个数字后面没有空格

    free(queue); 
    free(called);

    return 0;
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值