字母旋转

字母旋转方阵

Time Limit: 1000 ms Memory Limit: 65536 KiB

Submit Statistic Discuss

Problem Description

给定两个整数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
 

Input

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

Output

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

Sample Input

4 9

Sample Output

 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

Hint

Source

主要通过num1,num2控制,num1控制每完成一个环后开始新的环绕时到达的边界会发生变化,num2控制拐角的时候。

#include <stdio.h>  
void main()  
{  
    int M;  
    int N;  
    int flag=0;  
    int num1=0;  
    int num2=1;  
    int i=0;  
    int j=0;  
    char str='A';  
    char Array[31][31];  
    scanf("%d%d",&M,&N);  
    Array[0][0]=str;  
    while(flag < M*N-1)  
    {  
                switch(num2%4) {  //对4取余是因为有四个拐角的地方规律都不相同
                 case 1:  //上边横向
                        ++j;  
                       if(j == N-num1-1)  {  
                                num2++;  
                        }  
                        break;  
                case 2:  //右边纵向
                        ++i;  
                    if(i == M-num1-1)  
                    {  
                        num2++;  
                    }  
                    break;  
                        case 3: //下边横向 
                    --j;  
                                        if(j == num1)  
                    {  
                            num2++;  
                    }  
                    break;  
                case 0:  //左边纵向
                    --i;  
                        if(i == num1+1)  
                    {  
                    num2++;  
                    num1++;  
                    }  
                        break;  
                }  
  
                if(++str == 'Z'+1)  
                        str='A';  
  
                Array[i][j]=str;  
                flag++;  
  
        }  
  
        for(i=0;i<M;i++)  
        {  
                printf(" ");  
                for(j=0;j<N;j++)  
                {  
                    if(j!=N-1)  
                        printf("%c ",Array[i][j]);  
                        else   
                        printf("%c",Array[i][j]);  
                }  
                printf("\n");  
  
        }  
  
}  

 

  • 2
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值