思路来源:
观察这个图形发现:“从第二行开始将第一行的第n个字母开始逆序输出,加上正序输出剩下的字母”。
写代码的步骤:
我首先想到的是一行行打印,用了嵌套循环,先打印第一行数据吧,用ASCII码打印顺序字母:ABCDEFGH……,来个for 循环打印,之后套用函数进行逆序拼接.....
n, m = map(int,input().split())
# n为行数 m为列数
for j in range(n): #行数
n, m = map(int,input().split())
# n为行数 m为列数
for j in range(n):# 先遍历行数
#定义ASCII码初始值
o = 65
#检测是否为第一行(0)
if j == 0:
for i in range(m):
print(chr(o + i),end = "") #第一次i为0循环m次
else:
#不是第一行执行以下代码,再写逆序字母的函数
接下来就是怎么将字母逆序打印了,提供一个函数接口调用:输入需要逆序字母的个数n,打印n个逆序字母。
def reverse(n):
# 第几行就先加上几再逆序打印
for i in range(n + 1):
print(chr(65 + n -i),end = "")
拼接一下逆序打印的字母
n, m = map(int,input().split())
# n为行数 m为列数
for j in range(n):# 先遍历行数
#定义ASCII码初始值
o = 65
#检测是否为第一行(0)
if j == 0:
for i in range(m):
print(chr(o + i),end = "") #第一次i为0循环m次
print() #换行
else:
#不是第一行执行以下代码,再写逆序字母的函数
reverse(j)
for k in range(m - j - 1):
print(chr(66 + k),end="")
print()
写到这里发现有一些评测无法通过,原来是因为列数比行数多时会多打印一些内容,这就需要在逆序函数里添加一些判断了
代码修正:
#添加一个形参来判断是否退出打印
def reverse(n, count):
for i in range(n+1):
print(chr(65 + n - i),end="")
if count - 1 < i:
break
最终代码:
n, m = map(int,input().split())
# n为行数 m为列数
def reverse(n, count): #函数接口:输入整数,逆序打印
for i in range(n+1):
print(chr(65 + n - i),end="")
if count-1 <= i:
break
for j in range(n):
o = 65
if j == 0:
for i in range(m):
print(chr(o + i),end="")
print() # 打印顺序字母图案
else:
reverse(j,m)
for k in range(m - j - 1):
print(chr(66 + k),end="")
print()