• 算法学习(七)


    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
  • 相关阅读:
    leetcode 6 ZigZag Conversion
    OpenCL异构计算资料收集
    leetcode 21 Merge Two Sorted Lists
    leetcode 226 Invert Binary Tree 翻转二叉树
    leetcode 8 String to Integer (atoi)
    leetcode 27 Remove Element
    【Office】add ins
    【office】deploy
    【Office】add ins manifest
    【设计】交互设计理念
  • 原文地址:https://www.cnblogs.com/zt19994/p/7391289.html
Copyright © 2020-2023  润新知