【名企笔试】发奖金(搜狐2016研发笔试题)

1.

题目:公司进行了一次黑客马拉松大赛,全公司一共分为了N个组,每组一个房间排成一排开始比赛,比赛结束后没有公布成绩,但是每个组能够看到自己相邻的两个组里比自己成绩低的组的成绩,比赛结束之后要发奖金,以1w为单位,每个组都至少会发1w的奖金,另外,如果一个组发现自己的奖金没有高于比自己成绩低的组发的奖金,就会不满意,作为比赛的组织方,根据成绩计算出至少需要发多少奖金才能让所有的组满意。

输入描述:

每组数据先输入N,然后N行输入N个正整数,每个数表示每个组的比赛成绩。

输出描述:

输出至少需要多少w的奖金

示例1

输入 10

20 

32 

12 

32 

45 

11 

21 

31 

41 

33

输出

20

2.代码

# !/usr/bin/python
# -*- coding: UTF-8 -*-

num = 10
list = [20, 32, 12, 32, 45, 11, 21, 31, 41, 33]

test=[]
tax = [1 for i in range(10)]

# 构造变化函数
change = [-1]
for i in range(0,num-1):
    if list[i] < list[i+1]:
        change.append(1)
    else:
        change.append(-1)
print('change: ', change)

# 正式开始
for n in range(1, num + 1):
    print('\n..............%d................'% (n))
    add = 0
    # 最低点不需要修改数字
    if change[n-1] == -1:
        print('右边界如果是减小直接为最低奖金, 增量:', add)

    # 右边界如果是减小直接为最低奖金
    elif change[n-1] == -1 and change[n] == 1:
        print('最低点只有1w奖金, 增量:', add)
    else:
        if n >= num:
            break_flag_right = True
            print('右边不存在连续的下降')

        # 左边处理
        # change下降直接没有算下去的必要
        else:
            if change[n-1] == 1:
                add = 1
                for i in range(num):
                    print()
                    if change[n - i - 2] == 1:
                        add += 1
                        print('add:', add, 'change[%d] = %d' % (n - i - 2, change[n - i - 2]), end='')
                    elif change[n - i - 2] == -1:
                        print('add:', add, 'change[%d] = %d' % (n - i - 2, change[n - i - 2]))
                        break
                print('左边连续的1: ', add)

        # 右边减小的处理
        # while break_flag_right == False:
        # 同样 左边增量和你没什么关系
            else:
                add = 0
                for i in range(num):         # 循环次数 够用就行
                    if n+i >= num:
                        print('到末尾')
                        break
                    elif change[n + i] == -1:
                        add += 1
                        print('add:', add, 'change[%d] = %d' % (n + i, change[n + i]), end='')
                    else:
                        print('add:', add, 'change[%d] = %d' % (n + i, change[n + i]))
                        break
            print('右边一共几个-1: ', add)

    test.append(add)
print('test: ', test)
print('基本工资%d+每组奖金%d=%d'% (10, sum(test), sum(test)+10))
3. 结果

change:  [-1, 1, -1, 1, 1, -1, 1, 1, 1, -1]

..............第1次................
右边界如果是减小直接为最低奖金, 增量: 0

..............第2次................

add: 1 change[0] = -1
左边连续的1:  1
右边一共几个-1:  1

..............第3次................
右边界如果是减小直接为最低奖金, 增量: 0

..............第4次................

add: 1 change[2] = -1
左边连续的1:  1
右边一共几个-1:  1

..............第5次................

add: 2 change[3] = 1
add: 2 change[2] = -1
左边连续的1:  2
右边一共几个-1:  2

..............第6次................
右边界如果是减小直接为最低奖金, 增量: 0

..............第7次................

add: 1 change[5] = -1
左边连续的1:  1
右边一共几个-1:  1

..............第8次................

add: 2 change[6] = 1
add: 2 change[5] = -1
左边连续的1:  2
右边一共几个-1:  2

..............第9次................

add: 2 change[7] = 1
add: 3 change[6] = 1
add: 3 change[5] = -1
左边连续的1:  3
右边一共几个-1:  3

..............第10次................
右边界如果是减小直接为最低奖金, 增量: 0
test:  [0, 1, 0, 1, 2, 0, 1, 2, 3, 0]
基本工资10+每组奖金10=20

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值