博主之前刷题都是使用的c/c++去的,但是当我看得到python会就改成使用python刷题了。但是python刷题有些在网上没有很好的答案 ,所以这里博主就准备自己写一个专栏,就专门用来记录使用python刷的题(难度在中等以上),欢迎其他小伙伴一起交流。
这里因为使用的是python所以大家一定要注意那个时间限制
这下面是题 本题要求你写个程序把给定的符号打印成沙漏的形状。例如给定17个“*”,要求按下列格式打印
1 2 3 4 5 ***** *** * *** *****
所谓“沙漏形状”,是指每行输出奇数个符号;各行符号中心对齐;相邻两行符号数差2;符号数先从大到小顺序递减到1,再从小到大顺序递增;首尾符号数相等。
给定任意N个符号,不一定能正好组成一个沙漏。要求打印出的沙漏能用掉尽可能多的符号。
输入格式: 输入在一行给出1个正整数N(≤1000)和一个符号,中间以空格分隔。
输出格式: 首先打印出由给定符号组成的最大的沙漏形状,最后在一行中输出剩下没用掉的符号数。
输入样例:
输出样例: 1 2 3 4 5 6 ***** *** * *** ***** 2
代码长度限制
16 KB
时间限制
400 ms
内存限制
题解 解释一下里面的关键步骤
这里我用的是等差数列的办法确定层数的,应该还有其他的方法。
1 2 3 4 5 6 7 #确定层数 while True: if a*a*2-1<= n: a +=1 elif a*a*2-1> n: a = a-1 break
这里使用一个count 记录层数因为在打印正三角的时候会用到
这个j的作用是记录每一行一个输出的空格数
使用了rjust函数 来填充空格,如果不使用的话,也可以使用c/c++的那种方法,就是不使用的。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 str1 = input().split() n = int(str1[0]) s = str1[1] a = 1 #确定层数 while True: if a*a*2-1<= n: a +=1 elif a*a*2-1> n: a = a-1 break #记录层数 count =a #为输出空格数做准备 j = 2*count-1 # 如果只给的个数 小于2 if n <=1: print(s*n) print(n-a) # else: # 打印倒三角 while True: f=s*(2*a-1) print(f.rjust(j)) a=a-1 if a==0: break j=j-1 c =2 #打印正三角 while True: if count<2: break else: j=j+1 g=s*(2*c-1) print(g.rjust(j)) c=c+1 if c>count: break print(n - (count*count*2-1))
这里再给一个[lucky lures]https://blog.csdn.net/weixin_43862765?type=blog)给的答案。
他的答案里面给的注解非常详细,有不理解的小伙伴们可以滴滴博主
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 # 获取到数字和字符 lst = input().split() num,char = lst # 获取打印最大行数 num = int(num) total = 1 if num == 1: print(char) # 没用到的数字个数 print(num - total) else: i = 1 while total <= num: i += 2 total += 2*i # 最终行数和没用到的字符数 total -= 2*i i -= 2 # 打印上三角形部分 """ 行数 字符数 左半部分空格数 1 5 0 2 3 1 3 1 2 """ # 表空格数 0 1 2,也能用作行数 j = i // 2 for k in range(j+1): print(" "*k,end="") print(char *(i - 2 *k)) # 打印下三角形部分 """ 行数 字符数 左半部分空格数 4 3 1 5 5 0 """ for j in range(1,i+1,2): if j == 1: continue print(" "*((i - j) // 2),end="") print(char*j) print(num - total)