蓝桥杯 字母图形

蓝桥杯练习——基础训练

字母图形

【问题描述】

利用字母可以组成一些美丽的图形,下面给出了一个例子:

ABCDEFG

BABCDEF

CBABCDE

DCBABCD

EDCBABC

这是一个5行7列的图形,请找出这个图形的规律,并输出一个n行m列的图形。

【输入格式】

输入一行,包含两个整数n和m,分别表示你要输出的图形的行数的列数。

【输出格式】

输出n行,每个m个字符,为你的图形。

【样例输入】

5 7

【样例输出】

ABCDEFG
BABCDEF
CBABCDE
DCBABCD
EDCBABC

【数据规模与约定】

1 <= n, m <= 26。

思路

整体就是,每行以A为基准,然后向两边一边增大一边填数,思路很简单,但是实操就。。

咋说呢,一开始写了个运行错误的代码,有三组比较奇葩的数据没过。因为我一开始的思路是先把每行行号列号相等的地方把A填完了然后再填别的,结果有的数据列号比行号小,这个方法就不行了

(错误版本)

import java.util.Scanner;
public class ZimuPicWA {
	public static void main(String[] args) {
		// TODO Auto-generated method stub
		Scanner scanner=new Scanner(System.in);
		int n,m,i,j,k;
		char c='B';
		n=scanner.nextInt();
		m=scanner.nextInt();
		char ch[][]=new char[n+1][m+1];
		for(i=1;i<=n;i++) {
			ch[i][i]='A';
			for(j=i+1;j<=m;j++) {
				ch[i][j]=c;
				c++;
			}
			c='B';
			for(k=i-1;k>=1;k--) {
				ch[i][k]=c;
				c++;
			}
			c='B';
		}
		for(i=1;i<=n;i++) {
			for(j=1;j<=m;j++) {
				System.out.print(ch[i][j]);
			}
			System.out.println();
		}
	}
}

于是改变一下思路,不要先把A填完,而是随着循环每遇到一个数就去判断,这样就不会出现数组超界的情况。

对于j大于i的部分横向比较并填数,j小于i的部分竖向比较并填数。

代码

import java.util.Scanner;
public class Main {
	public static void main(String[] args) {
		// TODO Auto-generated method stub
		Scanner scanner=new Scanner(System.in);
		int n=scanner.nextInt();
		int m=scanner.nextInt();
		char ch[][]=new char[n+1][m+1];
		int i,j;
		for(i=1;i<=n;i++) {
			for(j=1;j<=m;j++) {
				if(i==j) {
					ch[i][j]='A';
				}
				else if(i>j) {
					ch[i][j]=(char) (ch[i-1][j]+1);
				}
				else {
					ch[i][j]=(char) (ch[i][j-1]+1);
				}
			}
		}
		for(i=1;i<=n;i++) {
			for(j=1;j<=m;j++) {
				System.out.print(ch[i][j]);
			}
			System.out.println();
		}
	}
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值