我在AIO(澳大利亚信息学奥林匹克)培训问题网站上尝试了以下问题(问题用斜体表示,细节用粗体表示,我的尝试如下):
问题
百科全书
输入文件:encyin.txt
输出文件:encyout.txt
时限:1秒
又一次是我的第一个百科全书鉴赏协会的问答之夜。一周又一周,你都来参加这些小测验,熟练地回答了一个又一个关于动物园动物和一周中的几天的问题,结果其他人在最后回答了所有晦涩难懂的奖金问题,抢占了第一名,留给你的只是一次“不错的尝试!”贴纸
沮丧和沮丧,你坐在家里沉思过去的失败,这时你想到了一个想法。可能是。。。?翻阅几个月愤怒地涂鸦的笔记,你证实了你的怀疑——奖金问题遵循一个超级简单的模式!你的心脏跳了一下。在每一个你参加过的每一个测验中,每一个问题都是以“我的第一本百科全书的第X页上有多少个单词”来表达的?“通常你会认为这有点不太可能,甚至是做作的,但现在不是——今天你有一个Mars酒吧要赢。”eem>
您需要极其小心地编译页码列表及其相应的字数。在你的位置上的其他人可能会试图记住这个列表,但不是,你的计划更高科技:首先,你将编写一个程序,可以为你回答这些问题;然后,你将把你信任的笔记本电脑偷偷带到测验中,然后开始闪电战比赛
剩下的就是让您实际编写程序。这项任务似乎很简单:它必须把你的数字清单和今晚的奖金问题,然后——悄悄地——为你打印出正确的答案
输入
输入的第一行的形式为nq,其中n是百科全书中的页数,q是要回答的问题数。(1<;=n,q<;=10000)
接下来是n行,每行描述一个页面。第i行将包含单个整数pi,即第i页上的字数。(0<;=pi<;=2000000000)
下面是q行,每行描述一个问题。这些行中的每一行都将包含一个整数x,表示“第x页上有多少个单词?”(1<;=x<;=n)
输出
对于每个问题,您的程序应该编写一行输出。此行应包含一个整数,即请求页面上的字数
我的尝试
我能够很容易地编写代码的开头:
file = open("encyin.txt", "r")
pages, questions = file.readline().split()
pages = int(pages)
questions = int(questions)
for i in range (0, int(pages)):
words = int(file.readline())
但我不知道下一步该怎么办。如何将给定的每个数字分配给一行?例如,第i行有一个整数,用于描述第i页上的字数,那么如何将该值分配给第i页
谢谢-我正在用python写作
你能试试这个吗
我注意到的第一件事是,您正在迭代
i in range(0, int(pages))
,但是,页面仅从第1行开始(第0行由n&q组成)因此,for循环应该更像这样(您还希望执行+1,因为您希望计算最后一页,否则python只会“正常运行,但不包括”):
在这里,我们放置.strip()函数,以便在将其转换为int时不会出现错误。默认情况下,文本文件在每行末尾都有
\n
(输入字符),python不理解int("5\n")
的含义。函数的作用是:去除回车字符和任何尾随的“空白”现在,您希望将每行的字数存储在某个位置,为此,您可以使用字典(https://www.w3schools.com/python/python_dictionaries.asp)或列表
列表索引从0开始,但每页单词数的行从1开始,即使你可以不使用列表,字典也会更直观
您可以查看我提供的链接,了解这些功能是如何工作的。然后,我们可以将这些单词添加到词典中:
然后,你可以用这些问题重复每一行。在这里,我们从每页字数结束的行后面的行开始for循环:
由此,您将得到一个页码字典作为关键字,每页单词作为值,以及一个包含所有问题的列表。然后您可以迭代这些内容,并获得页面中的字数:
现在,我还没有测试过任何代码,但是所有代码背后的想法都是一样的。如果您确实收到任何错误,请务必留下评论
相关问题 更多 >
编程相关推荐