本题要求你写个程序把给定的符号打印成沙漏的形状。例如给定17个“*”,要求按下列格式打印
*****
***
*
***
*****
所谓“沙漏形状”,是指每行输出奇数个符号;各行符号中心对齐;相邻两行符号数差2;符号数先从大到小顺序递减到1,再从小到大顺序递
增;首尾符号数相等。
给定任意N个符号,不一定能正好组成一个沙漏。要求打印出的沙漏能用掉尽可能多的符号。
输入在一行给出1个正整数N(<=1000)和一个符号,中间以空格分隔。
首先打印出由给定符号组成的最大的沙漏形状,最后在一行中输出剩下没用掉的符号数。
19 *
***** *** * *** *****
while True: try: n, flag = map(str, input().split()) S = 1 a = 1 stores = [flag] while S + (a + 2) * 2 < int(n): stores.append(stores[-1] + flag * 2) a += 2 S += a * 2 spaces = 0 for i in stores[::-1]: print(' ' * spaces, end='') spaces += 1 print(i) spaces -= 1 for i in stores[1:]: spaces -= 1 print(' ' * spaces, end='') print(i) print(int(n) - S) except: break
import sys n, ch = sys.stdin.readline().strip().split(' ') blank = ' ' n = int(n) d = (n - 1) // 2 d += 1 # 求层数 c = 1 for i in range(1, d // 2 + 1): if pow(i, 2) <= d: c = i else: break if d == 0: r = 0 c = 0 else: r = n - (2 * pow(c, 2) - 1) # 打印上三角 for i in range(1, c+1): print((i-1) * blank, end='') print((2*(c-i+1) - 1) * ch) # 打印下三角 for i in range(1, c): print((c - 1 - i) * blank, end='') print((2 * i + 1) * ch) print(r)
while True: try: x, s = input().split() x = eval(x) n = int(((x + 1) / 2) ** (1 / 2)) m = x - (2 * n ** 2 - 1) n -= 1 for i in range(n, 0, -1): print((s * i).rjust(n) + s + (s * i).ljust(n)) for i in range(n + 1): print((s * i).rjust(n) + s + (s * i).ljust(n)) print(m) except: break
# -*- coding:utf-8 -*- def method(): n, sign = input().split() k = int(((int(n) + 1) / 2.0) ** 0.5) result = [] for i in range(k): result.append(' ' * i + sign * (2 * (k - i) - 1) + ' ' * i) for i in range(1, k): result.append(' ' * (k - i - 1) + sign * (2 * i + 1) + ' ' * (k - i - 1)) for r in result: print(r) print(int(n)-2*k**2+1) if __name__ == '__main__': method()
a, b = input().split() a = int(a) - 1 i = 3 num = 0 c='' while a > 2 * i: num += 1 a = a - 2 * i i += 2 num1 = num for j in range(num): if j == 0: print(b * (2 * num + 1)) c = b * (2 * num + 1) else: print(str(b * (2 * num + 1)).center(len(c))) num -= 1 print(b.center(len(c))) for k in range(num1): print((b * (2 * (k + 1) + 1)).center(len(c))) print(a)
output = '' number,symbol = map(str,input().split()) Number = int(number) n = int(((Number+1)/2)**0.5) for i in range(n): for j in range(i): output += ' ' for k in range(2*n-2*i-1): output += symbol output += '\n' for i in range(n-1): for j in range(n-2-i): output += ' ' for k in range(2*i+3): output += symbol output += '\n' remain = Number - 2 * n ** 2 + 1 output += str(remain) print(output)
#python,打印了后面的空格,通过。 try: while True: tempInput = input().split() num = int(tempInput[0]) sign = tempInput[1] maxLen = 1 cost = 1 remaining = 0 while num > cost: #找出最大长度和剩余个数 if num>cost+2*(maxLen+2): maxLen+=2 cost+=2*maxLen else: remaining = num-cost break for i in range(maxLen//2+1): #打印到一颗“*”时停,注意边界 print(" "*i,end="") #前面的空格数 print(sign*(maxLen-i*2),end="") #中间的“*”数 print(" "*i) #我打印了后面的空格,是能通过的 for i in range(maxLen//2-1,-1,-1): #打印剩下的,符号递增的 print(" " * i, end="") print(sign * (maxLen - i * 2), end="") print(" " * i) print(remaining) except Exception: pass
直接把每层的数量求出来放到一个数组里面,遍历这个数组打印就可以了。
a = input().split()
# totalCount是符号的数量(一点一点的减掉) symbol是输入的符号(如*)
totalCount, symbol = int(a[0]) - 1, a[1]
# currentLevelCount是当前层符号的数量(从1,3,5递增)。symbolArray是每层符号的数量。
currentLevelCount, symbolArray = 3, [1]
# 每当可以再加一层,便进行计算。
while totalCount > currentLevelCount * 2:
totalCount = totalCount - currentLevelCount * 2
symbolArray.append(currentLevelCount)
symbolArray.insert(0, currentLevelCount)
currentLevelCount += 2
for i in symbolArray:
print(" " * ((symbolArray[0] - i) // 2) + symbol * i)
print(totalCount)