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

 

posted on 2018-03-12 13:04  Esquecer  阅读(467)  评论(0编辑  收藏  举报

导航