试题 基础练习 字母图形
提交此题 评测记录
资源限制
内存限制:256.0MB C/C++时间限制:1.0s Java时间限制:3.0s Python时间限制:5.0s
问题描述
利用字母可以组成一些美丽的图形,下面给出了一个例子:
ABCDEFG
BABCDEF
CBABCDE
DCBABCD
EDCBABC
这是一个5行7列的图形,请找出这个图形的规律,并输出一个n行m列的图形。
输入格式
输入一行,包含两个整数n和m,分别表示你要输出的图形的行数的列数。
输出格式
输出n行,每个m个字符,为你的图形。
样例输入
5 7
样例输出
ABCDEFG
BABCDEF
CBABCDE
DCBABCD
EDCBABC
数据规模与约定
1 <= n, m <= 26。
解题分析:
根据题目描述,我们可以发现这个程序输出的结果是有规律的。我发现的规律是:当输出完第一行字符内容后,第n(n>1)行的首字母按照英文字母表顺序依次往后递增。然后首字母后紧跟着首字母在“英文字母表”的前一个字母。直到当该行的字母变为“A”时,则会输出"A"以后的字母。当一行输出的长度等于程序规定的列数,则“字母图形”一行的内容输出完成。
我的实现思路是:根据ASCII码表示字母,其中“A“对应的ASCII值为65、“B”对应的ASCII值为66(与A的ASCII码值相差1)、“C”对应的ASCII值为67(与A的ASCII码值相差2)....依次类推:可以发现'A'后面的字母对应的ASCII码值可以根据,该字母与A的相对位置推算出来。我使用双层循环实现对程序的输出规范化,将第一个字母的ASCII码值设定为65,然后当字母图形中输出一行内容完毕后,就将第一个字母对应的ASCII码值(first_number)加1。然后根据first_number这个值判断当前的字母是否为A。如果为A,就将ASCII值减1。如果等于A,就将ASCII码值加1。
具体实现如下:
def letter_graph():
list_input=list(map(int,input().split())) #接受用户输入的n,m
for n in range(list_input[0]): #规定输出行数
first_number=65 #将每行首字母对应的ASCII码设置为65,即A
first_number+=n #当字母表的一行内容输出完成,则将下一行的首字母往后推移,即ASCII码加1
index=0 #初始化下标
first_number1=first_number #将每行首字母对应的ascii码值,保存到临时变量first_number中
for m in range(0,list_input[1]): #规定输出列数
if first_number1==65:
result=chr(first_number1+index) #如果ASCII码值为65,即A。将输出A以后得字母
index+=1
print(result,end="")
continue
if first_number1>65: #如果当前的字母是
print(chr(first_number1),end="")
first_number1-=1
print()
letter_graph()
运行通过截图:
试题 基础练习 01字串
提交此题 评测记录
资源限制
内存限制:256.0MB C/C++时间限制:1.0s Java时间限制:3.0s Python时间限制:5.0s
问题描述
对于长度为5位的一个01串,每一位都可能是0或1,一共有32种可能。它们的前几个是:
00000
00001
00010
00011
00100
请按从小到大的顺序输出这32种01串。
输入格式
本试题没有输入。
输出格式
输出32行,按从小到大的顺序每行一个长度为5的01串。
样例输出
00000
00001
00010
00011
<以下部分省略>
题目分析:
如果我们按照排列组合得到32个结果对于我来说,感觉有点困难。因为题目中描述的字母符串由五位01组成,我想到二进制相关知识,且升序输出。然后我就将最大的字符串11111写出来,发现对应的十进制数是31。所以我采用的思路是:通过一个for循环循环遍历生成0到31的十进制数,然后通过使用bin()函数将十进制数转换为二进制数。因为bin()函数返回的结果是一个字符串,且有二进制标志0b,所以我采用了字符串切片技术取出数值部分。然后结合实际情况,定义一个列表,列表元素是全部为0的字符串,用于将输出字符串中的数据补足为五位。
具体实现如下:
def fstr_01():
list_01=[]
list_zore=["0",'00','000','0000'] #定义一个列表用于补位
for i in range(32):
str_01=bin(i)[2:] #切片技术取出数据部分
str_index=5-len(str_01) #计算出当前数据需要补0位数
if str_index:
str_01=list_zore[str_index-1]+str_01 #对数据进行补0操作
print(str_01)
else:
print(str_01) #如果输出数据不用补0,则直接输出
fstr_01() #调用函数
运行通过截图:
试题 基础练习 闰年判断
提交此题 评测记录
资源限制
内存限制:256.0MB C/C++时间限制:1.0s Java时间限制:3.0s Python时间限制:5.0s
问题描述
给定一个年份,判断这一年是不是闰年。
当以下情况之一满足时,这一年是闰年:
1. 年份是4的倍数而不是100的倍数;
2. 年份是400的倍数。
其他的年份都不是闰年。
输入格式
输入包含一个整数y,表示当前的年份。
输出格式
输出一行,如果给定的年份是闰年,则输出yes,否则输出no。
说明:当试题指定你输出一个字符串作为结果(比如本题的yes或者no,你需要严格按照试题中给定的大小写,写错大小写将不得分。
样例输入
2013
样例输出
no
样例输入
2016
样例输出
yes
数据规模与约定
1990 <= y <= 2050。
题目分析:
这个题目就是一个条件控制语句,需要知道在python中"%"表示求余运算即可。
具体实现如下
def leap_year():
year=int(input())
if (year%4==0 and year%100!=0) or year%400==0: #润年的条件判断
print("yes" )
else:
print("no")
leap_year()
运行通过截图: