洛谷入门题 - 1

2019-10-19 Views 洛谷 编程1973字8 min read

洛谷创办于2013年,致力于为参加noip、noi、acm的选手提供清爽、快捷的编程体验。本系列入门文章真的只是入门,为初学者讲解如何解题(大佬请勿进入)。本文使用的编程语言为 python,总共10道题。
本文涉及的题目:P1000、P1001、P1035、P1046、P105、P1047、P1421、P1425、P1422、P1085

P1000

超级玛丽是一个非常经典的游戏。请你用字符画的形式输出超级玛丽中的一个场景。

                ********
               ************
               ####....#.
             #..###.....##....
             ###.......######              ###            ###
                ...........               #...#          #...#
               ##*#######                 #.#.#          #.#.#
            ####*******######             #.#.#          #.#.#
           ...#***.****.*###....          #...#          #...#
           ....**********##.....           ###            ###
           ....****    *****....
             ####        ####
           ######        ######
##############################################################
#...#......#.##...#......#.##...#......#.##------------------#
###########################################------------------#
#..#....#....##..#....#....##..#....#....#####################
##########################################    #----------#
#.....#......##.....#......##.....#......#    #----------#
##########################################    #----------#
#.#..#....#..##.#..#....#..##.#..#....#..#    #----------#
##########################################    ############

这题主要考察多行字符的存储,在python中存储多行字符可以按以下方式:

string = '''data'''

代码:

string ='''                ********
               ************
               ####....#.
             #..###.....##....
             ###.......######              ###            ###
                ...........               #...#          #...#
               ##*#######                 #.#.#          #.#.#
            ####*******######             #.#.#          #.#.#
           ...#***.****.*###....          #...#          #...#
           ....**********##.....           ###            ###
           ....****    *****....
             ####        ####
           ######        ######
##############################################################
#...#......#.##...#......#.##...#......#.##------------------#
###########################################------------------#
#..#....#....##..#....#....##..#....#....#####################
##########################################    #----------#
#.....#......##.....#......##.....#......#    #----------#
##########################################    #----------#
#.#..#....#..##.#..#....#..##.#..#....#..#    #----------#
##########################################    ############'''
print(string)

P1001

输入两个整数a,b,输出它们的和(|a|,|b|<=10^9)。

输入格式:
两个整数以空格分开

这题主要考察分割字符串,python中分割字符串的函数为split()

代码:

string = input().split()
print(int(string[0]) + int(string[1]))

P1035

已知:Sn=1+1/2+1/3++1/nS_n= 1+1/2+1/3+…+1/n。显然对于任意一个整数KK,当nn足够大的时候,SnS_n大于KK。 现给出一个整数KK1k151 \le k \le 15),要求计算出一个最小的nn;使得Sn>KS_n>K

问题的关键就是我们要用循环来模拟出SnS_n这个函数,代码如下:

a = int(input())
su = 0
i = 0

while su <= a:
    i+=1
    su = 1/i + su

print(i)

P1046

陶陶家的院子里有一棵苹果树,每到秋天树上就会结出1010个苹果。苹果成熟的时候,陶陶就会跑去摘苹果。陶陶有个3030厘米高的板凳,当她不能直接用手摘到苹果的时候,就会踩到板凳上再试试。

现在已知1010个苹果到地面的高度,以及陶陶把手伸直的时候能够达到的最大高度,请帮陶陶算一下她能够摘到的苹果的数目。假设她碰到苹果,苹果就会掉下来。

这题主要考察的也是前面讲到的字符串分割以及一些简单的循环判断,代码如下:

apple = input().split()
hand = int(input())
hand += 30
count = 0

for i in range(0,len(apple)):
    if int(apple[i]) <= hand:
        count += 1

print(count)

P1059

明明想在学校中请一些同学一起做一项问卷调查,为了实验的客观性,他先用计算机生成了N个1到1000之间的随机整数(N≤100),对于其中重复的数字,只保留一个,把其余相同的数去掉,不同的数对应着不同的学生的学号。然后再把这些数从小到大排序,按照排好的顺序去找同学做调查。请你协助明明完成“去重”与“排序”的工作。

这道题的关键是去重排序
关于排序,python有专门的给数组排序的方法sort()
去重则需要我们用循环来判断了

代码:

a = int(input())
num = input().split()
k = 0

for i in range(0,len(num)):
    num[i] = int(num[i])

num.sort()

for k in range(0,len(num) - 1):
    if num[k] == num[k+1]:
        num[k] = 0
        a -= 1

print(a)
for each in num:
    if each != 0:
        print(each,end=" ")

P1047

某校大门外长度为L的马路上有一排树,每两棵相邻的树之间的间隔都是11米。我们可以把马路看成一个数轴,马路的一端在数轴00的位置,另一端在LL的位置;数轴上的每个整数点,即0,1,2,,L0,1,2,…,L,都种有一棵树。 由于马路上有一些区域要用来建地铁。这些区域用它们在数轴上的起始点和终止点表示。已知任一区域的起始点和终止点的坐标都是整数,区域之间可能有重合的部分。现在要把这些区域中的树(包括区域端点处的两棵树)移走。你的任务是计算将这些树都移走后,马路上还有多少棵树。

这题我们的思想不是通过判断哪些路线能够合并,这样条件会非常的多,我们可以使用一个数组来存储路线的数据,1代表经过这条路,0表示不经过,这样也可以实现不扣除有重合的路线的树,代码如下:

a = input().split()
l = int(a[0]) + 1
xh = int(a[1])
r = []

for i in range(0,l+1):
    r.append(0)

for i in range(0,xh):
    tree = input().split()
    for k in range(int(tree[0]),int(tree[1])+1):
        r[k] = 1

for each in r:
    if each == 1:
        l -= 1

print(l)

P1421

班主任给小玉一个任务,到文具店里买尽量多的签字笔。已知一只签字笔的价格是1元9角,而班主任给小玉的钱是a元b角,小玉想知道,她最多能买多少只签字笔呢。

a = input().split()
money = int(a[0])+0.1*int(a[1])

print(int(money//1.9))

P1425

伦敦奥运会要到了,小鱼在拼命练习游泳准备参加游泳比赛,可怜的小鱼并不知道鱼类是不能参加人类的奥运会的。

这一天,小鱼给自己的游泳时间做了精确的计时(本题中的计时都按24小时制计算),它发现自己从a时b分一直游泳到当天的c时d分,请你帮小鱼计算一下,它这天一共游了多少时间呢?

小鱼游的好辛苦呀,你可不要算错了哦。

比较麻烦一点不需要判断分钟的方法就是先把两个时间都换成分钟然后相减,最后再把结果转换成时分,代码如下:

a = input().split()
start = int(a[0]) * 60 + int(a[1])
end = int(a[2]) * 60 + int(a[3])

t = end - start

h = t // 60
m = t - h * 60

print(str(h) + " " + str(m))

P1422

夏天到了,各家各户的用电量都增加了许多,相应的电费也交的更多了。小玉家今天收到了一份电费通知单。小玉看到上面写:据闽价电[2006]27号规定,月用电量在150千瓦时及以下部分按每千瓦时0.4463元执行,月用电量在151~400千瓦时的部分按每千瓦时0.4663元执行,月用电量在401千瓦时及以上部分按每千瓦时0.5663元执行;小玉想自己验证一下,电费通知单上应交电费的数目到底是否正确呢。请编写一个程序,已知用电总计,根据电价规定,计算出应交的电费应该是多少。

这题主要考察条件判断,代码如下:

a = int(input())

if a <= 150:
    money = round(0.4463*a,1)
elif a <= 400:
    money = round(0.4463*150 + (a-150)*0.4663,1)
else:
    money = round(0.4463*150 + 250*0.4663 + (a-400)*0.5663,1)

print(money)

P1085

津津上初中了。妈妈认为津津应该更加用功学习,所以津津除了上学之外,还要参加妈妈为她报名的各科复习班。另外每周妈妈还会送她去学习朗诵、舞蹈和钢琴。但是津津如果一天上课超过八个小时就会不高兴,而且上得越久就会越不高兴。假设津津不会因为其它事不高兴,并且她的不高兴不会持续到第二天。请你帮忙检查一下津津下周的日程安排,看看下周她会不会不高兴;如果会的话,哪天最不高兴。

这题考察的也是数据读取以及条件判断,代码如下:

t = []
p = 0

for i in range(0,7):
    a = input().split()
    a = int(a[0]) + int(a[1])
    t.append(a)

for i in range(0,6):
    if t[i+1] > t[p]:
        p = i+1

if t[p] <= 8:
    print(0)
else:
    print(p+1)

注:如有更简单的代码欢迎在评论区留言哦!



logo   WRITTEN BY:Serence

一个程序员和文艺青年的博客!

本文章采用CC BY-NC-SA 4.0进行许可。转载请注明出处!

上一篇

洛谷入门题 - 2


下一篇

诗与话 - 2