L1-002 打印沙漏 (20 分)
摘要
Title: L1-002 打印沙漏 (20 分)
Tag: 二分、模拟
Memory Limit: 64 MB
Time Limit: 1000 ms
Powered by:NEFU AB-IN
L1-002 打印沙漏 (20 分)
-
题意
本题要求你写个程序把给定的符号打印成沙漏的形状。例如给定17个“*”,要求按下列格式打印
所谓“沙漏形状”,是指每行输出奇数个符号;各行符号中心对齐;相邻两行符号数差2;符号数先从大到小顺序递减到1,再从小到大顺序递增;首尾符号数相等。
给定任意N个符号,不一定能正好组成一个沙漏。要求打印出的沙漏能用掉尽可能多的符号。 -
思路
由于数据只有1000,那么先把表打出来,二分查找小于等于n的最后一个值
按照题目要求打出来即可 -
代码
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'''
Author: NEFU AB-IN
Date: 2022-04-13 11:35:27
FilePath: \ACM\GPLT\L1-002.py
LastEditTime: 2022-04-13 11:35:40
'''
from bisect import bisect_right
a = [0, 1]
i, cnt = 1, 3
while i <= 1000:
i = i + 2 * cnt
a.append(i)
cnt += 2
n, c = input().split()
n = int(n)
id = bisect_right(a, n) - 1
num, tmp = 2 * id - 1, 2 * id - 1
for i in range(id - 1):
print(" " * ((tmp - num) // 2) + num * c)
num -= 2
print(" " * ((tmp - num) // 2) + c)
for i in range(id - 1):
num += 2
print(" " * ((tmp - num) // 2) + num * c)
print(n - a[id])