L1-002 打印沙漏 (20 分)

摘要
Title: L1-002 打印沙漏 (20 分)
Tag: 二分、模拟
Memory Limit: 64 MB
Time Limit: 1000 ms

Powered by:NEFU AB-IN

Link

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])
使用搜索:谷歌必应百度