第一次写自己的blog--C语言基础题目--字母螺旋方阵

字母旋转方阵

Time Limit: 1000ms   Memory limit: 65536K  有疑问?点这里^_^

题目描述

给定两个整数M,N,生成一个M*N的矩阵,矩阵中元素取值为A至Z的26个字母中的一个,A在左上角,其余各数按顺时针方向旋转前进,依次递增放置,当超过26时又从A开始填充。例如,当M=5,N=8时,矩阵中的内容如下:

 A B C D E F G H
 V W X Y Z A B I
 U J K L M N C J
 T I H G F E D K
 S R Q P O N M L
 

输入

M为行数,N为列数,其中M,N都为大于0的整数。

输出

分行输出相应的结果,注意每行开始有1个空格,相邻两个字母之间有1个空格。

示例输入

4 9

示例输出

 A B C D E F G H I
 V W X Y Z A B C J
 U J I H G F E D K
 T S R Q P O N M L
  • 提交 
  • 状态 
  • 讨论

#include <stdio.h>

#include <string.h>
#define maxn 100
char a[maxn][maxn];
int main()
{
    int m,n;
    scanf("%d %d", &m, &n);
    memset(a,'\0',sizeof(a));


    int x, y;
    int total = 1;
    char digit = 65;
    x = 0, y = 0;
    a[x][y] = 65;
    while(total < m*n){
        while(y+1<n&&!a[x][y+1]){
            if(digit>=90){
                digit = 64;
            }
            a[x][++y] = ++digit;
            ++total;
        }
        while(x+1<m&&!a[x+1][y]){
            if(digit>=90){
                digit = 64;
            }
            a[++x][y] = ++digit;
            ++total;
        }
        while(y-1>=0&&!a[x][y-1]){
            if(digit>=90){
                digit = 64;
            }
            a[x][--y] = ++digit;
            ++total;
        }
        while(x-1>=0&&!a[x-1][y]){
            if(digit>=90){
                digit = 64;
            }
            a[--x][y] = ++digit;
            ++total;
        }
    }
    for(x = 0;x < m;x++){
        for(y = 0;y < n;y++){
            printf(" %c",a[x][y]);
        }
        printf("\n");
    }
}

你可能感兴趣的:(sdutOJ_2254)