10opts,C语言求助
  • 板块题目总版
  • 楼主laitr
  • 当前回复2
  • 已保存回复2
  • 发布时间2024/3/24 20:04
  • 上次更新2024/3/24 21:41:30
查看原帖
10opts,C语言求助
1299338
laitr楼主2024/3/24 20:04
#include<stdio.h>

int num[510][510]; // 用于存储每次魔法的参数
int figure[510][510]; // 用于存储最终的二维数组

// 函数:对二维数组进行旋转操作
// 参数:a为待旋转的二维数组,n为数组大小,x、y为旋转中心坐标,r为旋转半径,z为旋转方向(0表示逆时针,1表示顺时针)
void fangzhuang(int a[510][510], int n, int x, int y, int r, int z)
{
    int i, j, k, l;
    int b[510][510]; // 临时数组,用于存储旋转前的数组a的副本
    for(i = 1; i <= n; i++)
    {
        for(j = 1; j <= n; j++)
        {
            b[i][j] = a[i][j]; // 复制数组a到数组b
        }
    }
    // 根据旋转方向z进行不同的旋转操作
    if(z == 1) // 顺时针旋转
    {
        for(i = x - r, k = y - r; i <= x + r; i++, k++)
        {
            for(j = y - r, l = x + r; j <= y + r; j++, l--)
            {
                a[k][l] = b[i][j]; // 将b中的元素按照顺时针旋转的位置赋值给a
            }
        }
    }
    else // 逆时针旋转
    {
        for(i = x - r, k = x + r; i <= x + r; i++, k--)
        {
            for(j = y - r, l = y + r; j <= y + r; j++, l--)
            {
                a[l][j] = b[i][j]; // 将b中的元素按照逆时针旋转的位置赋值给a
            }
        }
    }
}

int main()
{
    int n, m;
    scanf("%d%d", &n, &m); // 读取数组大小n和魔法施放次数m
    int i, j, k = 1;
    for(i = 0; i < m; i++)
    {
        for(j = 0; j < 4; j++)
        {
            scanf("%d", &num[i][j]); // 读取每次魔法的参数
        }
    }
    // 初始化二维数组figure
    for(i = 1; i <= n; i++)
    {
        for(j = 1; j <= n; j++)
        {
            figure[i][j] = k; // 从1到n*n填入二维数组figure
            k++;
        }
    }
    // 对每次魔法调用fangzhuang函数进行旋转操作
    for(i = 0; i < m; i++)
    {
        fangzhuang(figure, n, num[i][0], num[i][1], num[i][2], num[i][3]);
    }
    // 输出最终的二维数组figure
    for(i = 1; i <= n; i++)
    {
        for(j = 1; j <= n; j++)
        {
            printf("%d ", figure[i][j]);
        }
        printf("\n");
    }
    return 0;
}
2024/3/24 20:04
加载中...