用c语言 结构体数组完成。

  1. 简答题
    题目描述

有54张牌,牌面分别为2 3 4 5 6 7 8 9 10 J Q K A W。其中W有2张,包含两种花色,分别为red和black,其余牌面每种均有4张,包含四种花色,分别为heart spade club diamond。接下来执行洗牌操作,将牌的位置改变为指定位置。例如有5张牌,排列顺序为:heart-3 spade-K club-10 diamond-A red-W 给 定洗牌操作序列{4 2 5 3 1},即把heart-3放到4号位 spade-K放到2号位 club-10放到5号位、diamond-A放到3号位、red-W放到1号位,于是排序就变成了red-W spade-K diamond-A heart-3 club-10。如果要将上面的洗牌操作执行第2次,则最后的洗牌结果为club-10 spade-K heart-3 red-W diamond-A。

输入格式

    第一行给出正整数N1N54)表示纸牌的数量。随后N行表示N张牌的初始排列信息  信息包括牌面和花色  以空格间隔。

    接下来一行给出一个正整数K(≤100),表示洗牌操作次数;最后一行给出洗牌操作序列    包含N个正整数   正整数取值范围在154之间    以空格间隔。

输出格式

    输出N行   给出N张牌的最后排列结果    每行给出一张牌的牌面和花色    以空格间隔。

输入样例

5

3 heart

K spade

10 club

A diamond

W red

2

4 2 5 3 1

输出样例

10 club

K spade

3 heart

W red

A diamond

你题目的解答代码如下:

#include <stdio.h>
#include <stdlib.h>
struct pt
{
    char num[3];
    char color[20];
};
int main()
{
    int i, j, n, m;
    scanf("%d", &n);
    struct pt sd[n], st[n], *p, *q, *t;
    int a[n];
    p = sd;
    q = st;
    for (i = 0; i < n; i++)
        scanf("%s %s", sd[i].num, sd[i].color);
    scanf("%d", &m);
    for (i = 0; i < n; i++)
        scanf("%d", &a[i]);
    for (j = 0; j < m; j++)
    {
        for (i = 0; i < n; i++)
        {
            q[a[i]-1] = p[i];
        }
        t = p;
        p = q;
        q = t;
    }
    for (i = 0; i < n; i++)
        printf("%s %s\n", p[i].num, p[i].color);
    return 0;
}

img

如有帮助,请点击我的回答下方的【采纳该答案】按钮帮忙采纳下,谢谢!

img