• TOJ5398: 签到大富翁(简单模拟) and TOJ 5395: 大于中值的边界元素(数组的应用)


    Python代码!!!

    5395 传送门:http://acm.tzc.edu.cn/acmhome/problemdetail.do?&method=showdetail&id=5395

    5398传送门:http://acm.tzc.edu.cn/acmhome/problemdetail.do?&method=showdetail&id=5398

    5395:大于中值的边界元素

    时间限制(普通/Java):1000MS/3000MS     内存限制:65536KByte

    描述

    给定一个二维数组,求二维数组的边界元素中,大于二维数组“中值”的元素个数。这里的“中值”定义为一个元素序列中:

    (1)当元素个数为奇数时,即为中间大的元素;

    (2)当元素个数为偶数时,为中间大的两个元素的平均值。

    输入

    第一行为两个元素n和m,表示二维数组的行数和列数。

    接下来又n行,每行m个整数,表示数组元素值。

    1<=n,m<=100。

    输出

    输出大于中值的元素个数。

    样例输入

    3 3
    1 2 3
    2 3 1
    4 1 5

    样例输出

    3

    提示

    中值为2,因此边界元素中大于2的元素个数为3个。

    思路:

    因为题目要求中位数,所以不知道整个数组是奇数个还是偶数个的情况下,还是直接把数组元素都用float存储比较好。

    然后就是存的时候可以浪费一下空间,存一个二维数组,另外再把所有元素存到一个一维数组,这样找中位数方便一点。

    然后比较就是比较四个边上的元素和中位数比较。easy!

    if __name__ == "__main__":
        n ,m = map(int,input().split())
        a,b,sum = [[0 for i in range(m)]for j in range(n)],[],0
        for i in range(n):
            a[i] = input().split()
            for j in range(m):
                a[i][j] = float(a[i][j])
                b.append(a[i][j])
        b.sort()
        num = float(b[len(b)//2]) if len(b)%2==1 else (b[len(b)//2+1]+b[len(b)//2])/2
        for i in range(n):
            for j in range(m):
                if i == 0 or j == 0 or i == n-1 or j == m - 1:
                    if a[i][j] > num: sum += 1
        print(sum)

    TOJ5398: 签到大富翁

    时间限制(普通/Java):1000MS/3000MS     内存限制:65536KByte

    台州移动有一个活动叫做“签到大富翁”,用户签到后可以得到“掷骰子”的机会,根据用户掷骰子的点数,可以到达某个方格,从而获得相应的奖励。但有些格子可能会倒退或前进一步,最终到达了另一个格子。现在请你根据掷骰子的点数确定能获什么奖励。

    为简化起见,这里只需要输出对应格子的数字即可(具体实现这个游戏时,你可以根据该数字确定奖品类型)。

    输入

    输入数据的第一行为整数n(n<=50),表示地图中的格子数目。

    第二行为n个整数,表示格子中的数字值,如果为-1,表示后退一步,如果为1表示前进一步,其他数字对应奖品或无奖品,每次掷骰子最多只能前进或倒退一次。

    第三行为整数m(m<=10),表示玩家可以掷骰子的次数。

    第四行为m个整数,表示玩家分别掷出的骰子点数(1~6之间)。

    玩家总是从第一个格子出发,当到达终点时(掷骰子点数超出终点也将停留在终点),下一次掷骰子将重新从起点出发。

    输出

    输出每次掷骰子所到达格子的对应数字值,每行一个。

    样例输入

    10
    0 1 2 -1 3 4 2 1 5 0
    3
    3 2 5

    样例输出

    2
    3
    0

    思路:直接模拟就好了,注意一下,进一步和退一步,只能执行一次!

    7

    0 5 4 1 -1 1 0

    3

    5 4 3

    输出: 

    0

    1

    0

    代码:

    if __name__ == "__main__":
        n,str= input(),input()
        a = [int(i) for i in str.split()]
        n,str= input(),input()
        b = [int(i) for i in str.split()]
        ard ,f=0,0
        for i in range(len(b)):
            ard += b[i]
            if ard >= (len(a)-1): f,ard = 1,len(a)-1
            if  a[ard] == 1:ard+=1
            elif a[ard] == -1:ard-=1
            if ard >= (len(a)-1): f,ard = 1,len(a)-1
            print(a[ard])
            if f == 1:ard,f=0,0
  • 相关阅读:
    实现JDK代理
    Dictionary字典类介绍
    在服务器上新建虚拟机及安装系统
    开启远程桌面设置
    Windows Server 2008 R2远程协助选项灰色
    server 2012系统更改电脑密码
    eclipse + maven + scala+spark环境搭建
    C#数据路接口中获取SQL数据的用法
    C#常用快捷键
    oracle常用的快捷键
  • 原文地址:https://www.cnblogs.com/Esquecer/p/8548722.html
Copyright © 2020-2023  润新知