YTU OJ 3232: 字母旋转方阵

本文介绍了一个算法,用于生成指定大小的矩阵,并按顺时针方向从A到Z填充字母。当矩阵大小为M=5,N=8时,展示了具体的填充结果。代码使用Java实现,通过控制四个边界的动态变化,实现了矩阵的高效填充。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

题目描述

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

【AC代码】:

import java.util.Scanner;

public class Main {
	public static void main(String[] args) {
       Scanner sc=new Scanner(System.in);
		int i = 0, j = 0;
		int height =sc.nextInt() ;
		int width = sc.nextInt();
		int[][] a = new int[height][width];
		int m = 1, s = 1,sum=1;
		int x1 = 0;int y1 = 0;//左上边界
		int x2 = height;int y2 = width;//右下边界
		while (true) {
			if (s == 1) {
				/*从左至右*/
				for (; j < y2; j++) {
					if(m==27)
						m=1;//达到Z后一个变为A
					sum++;//计算总数
					a[i][j] = m++;
				}
				j--;i++;y2--;
				/*从上至下*/
				for (; i < x2; i++) {
					if(m==27)
						m=1;
					sum++;
					a[i][j] = m++;
				}
				i--;j--;x2--;
				s = -1;
			} else {
				/*从右至左*/
				for (; j >= y1; j--) {
					if(m==27)
						m=1;
					sum++;
					a[i][j] = m++;
				}
				j++;i--;y1++;
				/*从下至上*/
				for (; i >= x1 + 1; i--) {
					if(m==27)
						m=1;
					sum++;
					a[i][j] = m++;
				}
				i++;j++;x1++;
				s = 1;
			}
			if (sum > height * width)
				break;
		}
		for (i = 0; i < height; i++) {
			for (j = 0; j <width; j++)
				System.out.print(" "+(char)(a[i][j]+'A'-1));
			System.out.println();
		}
			
	}
}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值