蓝桥杯 字母图形题
题目概述:利用字母可以组成一些美丽的图形,下面给出了一个例子:
ABCDEFG
BABCDEF
CBABCDE
DCBABCD
EDCBABC
这是一个5行7列的图形,请找出这个图形的规律,并输出一个n行m列的图形。
输入格式: 输入一行,包含两个整数n和m,分别表示你要输出的图形的行数的列数。
解答:
import java.util.Scanner;
public class test3 {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int n = sc.nextInt();
int m = sc.nextInt();
int[] a = new int[26];
char s = 'A';
for(int i=0;i<26;i++){
a[i] = s+i;
}
for (int i=0;i<n;i++) {
for (int k=i;k>0;k--){
System.out.print((char)a[k]);
}
for (int j=0;j<m-i;j++) {
System.out.print((char)a[j]);
}
System.out.println('\n');
}
}
}
写完上面的代码后,感觉没毛病,我就在蓝桥杯的练习系统提交了,结果:0分
重新思考其中的逻辑,发现自己忽略了当行数大于列数的情况,如果行数为4,列数为2,上述代码运行出来之后的结果是这样的:
很明显结果是错误的。
修改之后的代码:
import java.util.Scanner;
public class test3 {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int n = sc.nextInt();
int m = sc.nextInt();
int[] a = new int[26];
char s = 'A';
for(int i=0;i<26;i++){
a[i] = s+i;
}
for (int i=0;i<n;i++) {
for (int k=i;k>0&&k<m;k--){
System.out.print((char)a[k]);
}
for (int j=0;j<m-i;j++) {
System.out.print((char)a[j]);
}
System.out.println('\n');
}
}
}
结果:20分
但是我这次实在找不到自己的程序错在哪里了,无奈就去网上找别人的代码,放在蓝桥杯测评系统上面运行,100分!!!!
下面是我从网上找到的运行之后100分的代码:
import java.util.Scanner;
public class test1 {
public static void main(String[] args) {
Scanner sc= new Scanner(System.in);
int n = sc.nextInt();
int m = sc.nextInt();
int[] a = new int[26];
char s = 'A';
for(int i=0;i<26;i++) {
a[i] = s+i;
}
for(int i=0;i<n;i++) {
for(int j=i;j>=i-m+1&&j>-1;j--) {
System.out.print((char)a[j]);
}
for(int k=1;k<=m-i-1;k++) {
System.out.print((char)a[k]);
}
System.out.println();
}
}
}
我仔细对比了这两种写法,发现思路有一点点不一样。
以打印出CBABCDE这一行为例:
我的做法是先打印出CB,再打印出后面的ABCDE
网友的做法是先打印出CBA,再打印出后面的BCDE。
但我还是不知道自己的代码问题出在哪,如果有细心的网友发现了其中的不妥,望告知,十分感谢!!!