算法学习(七)
1.Bulls and Cows
说明:这是两个人的游戏,通常是用纸和笔进行的。现代版也被称为“策划者”。
第一个玩家,爱丽丝,选择一个四位数的密码(1492),所有的数字都不一样。
第二个玩家,芭芭拉,尝试猜测个密码。她可以提供任何4位数的组合(不需要重复)——而且每次尝试,爱丽丝都应该给出一个提示。
这个提示由两个值组成:
第一个数告诉我们正确猜出了多少位数字,并在正确的位置上;
第二种方法是正确地猜出有多少位数字,但在错误的位置。
例如,如果这个秘密值是1492,芭芭拉的猜测是2013,那么爱丽丝应该用0-2来提示。
如果猜测是1865,那么提示将是1-0。
这个游戏也可以用4个字母的单词来玩,但在这种情况下,它可能需要语言的知识。
问题陈述:你的目标是写一个程序来计算这些值,并由猜测值返回提示。
例子:
input data: 1492 5 2013 1865 1234 4321 7491 answer: 0-2 1-0 1-2 0-3 2-1
Input data 将包含第一行的秘密值和猜测值的数量。
第二行包含指定数量的猜测。
Answer 答案应该包含这些猜测的提示,它们应该以x-y格式给出,并与空格分隔。
Test data:
0197 11 1796 0869 2140 9210 9624 6417 7208 4867 8902 8971 2164
代码如下:
1 data1 = input().split() 2 correct_num = list(data1[0]) # 秘密数值,转化为列表形式 3 guess_nums = int(data1[1]) # 猜测值数量 4 data2 = input().split() 5 6 for n in data2: 7 guess = list(n) 8 first = 0 9 two = 0 10 for m in range(4): 11 if guess[m] == correct_num[m]: # 比较有多少猜对的数,在正确的位置上 12 first += 1 13 elif guess[m] in correct_num: # 有多少位猜对的数 14 two += 1 15 print('{}-{}'.format(first, two), end=' ') 16 17 输出: 1-2 1-1 1-1 0-3 0-1 1-1 0-2 1-0 0-2 0-3 1-0
2.Two Printers(两个打印机的问题)
说明:现在有了一个商业协议——需要打印一份包含N页的文件。
有两台打印机,但看起来打印机的工作速度是不同的。一个在X秒内打印完成一页,另一个在Y秒内完成一页。
现在的问题是求出可以花最少的时间用两台打印机打印整个文档。
例子:
input data: 2 1 1 5 3 5 4 answer: 3 9
Input data 第一行中包含测试用例数。
然后,测试用例每一个都在单独的行中。
每个测试用例包含三个整数值——X Y N,其中N不会超过10亿。
Answer 应该包含每个测试用例的打印时间,由空格分隔。
分析:应该把打印一页的不同时间,转化为相同时间打印多少页
输入数据:
16 397 198 799028 5 13 64495601 11 2 69516005 338 900 972621 67 62 7644114 886 73 974401 124 9 6394340 20 33 15282074 1 1 618615655 82 56 9300869 1248 427 524338 1005 2674 98192 121 66 6071269 786 486 601058 1283455 473995 269 97484 57402 6470
代码如下:
1 test_cases = int(input()) # 测试用例数量 2 for i in range(test_cases): 3 testcase = input().split() 4 X = int(testcase[0]) 5 Y = int(testcase[1]) 6 N = int(testcase[2]) 7 time = N / (1 / X + 1 / Y) # 转化为1秒钟可以打印多少x和y,求出大概时间 8 numX = (time // X) + 1 # 讨论打印最后一页的问题,X多打一页 9 numY = (time // Y) + 1 # Y多打一页 10 Ans = round(min(numX*X, numY*Y)) # 取X,Y多打一个时,它们两个值的最小值,就是一起打印所需的最小时间 11 print(Ans, end=' ') 12 13 输出:105560334 232900785 117642472 238991400 246152338 65716717 53654769 190305080 309307828 309489812 166816517 71725845 259278921 180504774 93377015 233766632