蛇形方式逐个顺序存入N阶方阵 09-4

15  16  22  23  25
 7   14  17  21  24
 6    8   13  18  20
 2    5    9   12  19
 1    3    4   10  11

a[1][1]=1; a[1][3]=6; a[5][1]=11;   a[2][5]=16; a[4][4]=21;

a[1][2]=2; a[1][4]=7; a[4][2]=12;   a[3][4]=17; a[3][5]=22;

a[2][1]=3; a[2][3]=8; a[3][3]=13;   a[4][3]=18; a[4][5]=23;

a[3][1]=4; a[3][2]=9; a[2][4]=14;   a[5][2]=19; a[5][4]=24;

a[2][2]=5;a[4][1]=10;a[1][5]=15;   a[5][3]=20; a[5][5]=25;

在进行逆时针旋转,b[i][j]=a[j][n-i+1]

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

int main()
{
    int n;
    scanf("%d", &n);
    int a[100][100],b[100][100];//二维数组大小自定
    int k = 1;

    //输入下三角(后n-1个斜行)
    for (int i = 1; i <= n; i++)//根据斜行的规律写算法
        for (int j = 1; j <= i; j++)
        {
            if (i % 2 == 0)//判断是奇数斜行还是偶数斜行(将0该为一可改变蛇形数组走向)
                a[j][i + 1 - j] = k;
            else
                a[i + 1 - j][j] = k;
            k++;
        }
    //输入上三角(后n-1个斜行)
    for (int i = n + 1; i < 2 * n; i++)
        for (int j = 1; j <= 2 * n - i; j++)
        {
            if (i % 2 == 0)//判断是奇数斜行还是偶数斜行(将0该为一可改变蛇形数组走向)
                a[i - n + j][n + 1 - j] = k;
            else
                a[n + 1 - j][i - n + j] = k;
            k++;
        }

//逆时针旋转90°
    for (int i = 1; i <= n ; ++i) {
        for (int j = 1; j <= n; ++j) {
            b[i][j]=a[j][n-i+1];
        }
    }
    for (int i = 1; i <= n; i++)
    {
        for (int j = 1; j <= n; j++)
            printf("%-4d", b[i][j]);
        printf("\n");

    }


    return 0;
}
#include <stdio.h>

int main() {
    int a[20][20]={0},n;
    scanf("%d",&n);
    int up=1;
    int row=n-1;
    int col=0;
    int num=1;
    a[row][col]=num;
    while (num<=n*n)
    {
        if (up) {
            row--; col--;
        }
        else {
            row++; col++;
        }
        if (row==-1)                      // 超过首行的位置
        {
            row++; col=col+2;  up=1-up;
        }
        if (col==n)                       // 超过最右列的位置
        {
            row=row-2; col--;   up=1-up;
        }


        if (row==n)                       // 超过底行的位置
        {
            row--;   up=1-up;
        }
        if (col==-1)                     // 超过最左列的位置
        {
            col++;   up=1-up;
        }
        a[row][col]=++num;
    }

    for (int i=0;i<n;i++) {
        for (int j = 0; j < n; j++)
            printf("%4d", a[i][j]);
        printf("\n");
    }
    return 0;
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值