回旋矩阵

#include <stdio.h>
#define M 50

void main()
{
    int i,j,n,count;
    int dada[M][M] = {0};
    printf("Input n(0~%d):",M);
    scanf("%d",&n);
    count = 1;
    for(i=0;i<(n+1)/2;i++)
    {
        for (j=i;j<n-i;j++)
        {
            dada[i][j] = count++;
        }
        for (j=i+1;j<n-i;j++)
        {
            dada[j][n-i-1] = count++;
        }
        for (j=n-i-2;j>=i;j--)
        {
            dada[n-i-1][j] = count++;
        }
        for (j=n-i-2;j>i;j--)
        {
            dada[j][i] = count++;
        }
    }
    for (i=0;i<n;i++)
    {
        for (j=0;j<n;j++)
        {
            printf("%5d",dada[i][j]);    
        }
        printf("\n\n");
    }
}
   
#include <stdio.h>int main(){ int a[10][10]; int i,j,k,n,b=0; scanf("%d",&n); for ( i=0; i<n/2; i++) { for ( j=i; j<n-i; j++) /*四个循环按不同的方向进行*/ a[i][j] = ++b; for ( k=i+1,j--; k<n-i; k++ ) a[k][j] = ++b; for ( j=--k,j--; j>=i; j-- ) a[k][j] = ++b; for ( k--; k>i; k-- ) a[k][i] = ++b; } if ( n%2 ) /*如果是单数的话,要加上最大的那个数放在中间*/ a[i][i] = ++b; for ( i=0; i<n; i++) { for ( j=0; j<n; j++) printf("%3d",a[i][j]); printf("\n"); } fflush(stdin); getchar(); return 0;}


方法一:

 

方法2:

#include <stdio.h> #define MAX 100 #define RIGHT 0 #define LEFT 1 #define UP 2 #define DOWN 3 typedef struct Position { int x; int y; }Pos; int guid[MAX][MAX] = {0}; int map[MAX][MAX]; Pos CurPos; int LastDirection; int n; int GetDirection(); void GetNextPos(int Direction); void Show(); int main() { scanf("%d", &n); CurPos.x = CurPos.y = 0; map[0][0] = 1; guid[0][0] = 1; LastDirection = RIGHT; for(int k = 0; k < n * n - 1; k++) { int Direction = GetDirection(); GetNextPos(Direction); map[CurPos.x][CurPos.y] = k + 2; guid[CurPos.x][CurPos.y] = 1; LastDirection = Direction; } Show(); fflush(stdin); getchar(); return 0; } int GetDirection() { if(LastDirection == RIGHT) { if(CurPos.y == n - 1 || guid[CurPos.x][CurPos.y + 1] == 1) return DOWN; else return RIGHT; } else if(LastDirection == DOWN) { if(CurPos.x == n - 1 || guid[CurPos.x + 1][CurPos.y] == 1) return LEFT; else return DOWN; } else if(LastDirection == LEFT) { if(CurPos.y == 0 || guid[CurPos.x][CurPos.y - 1] == 1) return UP; else return LEFT; } else if(LastDirection == UP) { if(CurPos.x == 0 || guid[CurPos.x - 1][CurPos.y] == 1) return RIGHT; else return UP; } } void GetNextPos(int Direction) { switch(Direction) { case RIGHT: CurPos.y++; break; case DOWN: CurPos.x++; break; case LEFT: CurPos.y--; break; case UP: CurPos.x--; break; } } void Show() { for(int m = 0; m < n; m++) { for(int k = 0; k < n; k++) { printf("%4d", map[m][k]); } printf("\n"); } }


 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值