博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
笔试题:发奖金(搜狐2016研发笔试题)
阅读量:5999 次
发布时间:2019-06-20

本文共 1374 字,大约阅读时间需要 4 分钟。

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

输入描述:

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

输出描述:

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

示例1

输入

10

20 

32 

12 

32 

45 

11 

21 

31 

41 

33

输出

20

解题思路:

      虽然有个公众号上经常发这种题目,但是自己好长时间没做了。今天有些无聊,还是做个题吧!首先对于此题,求最优解。刚一开始想的是可不可以通过来回遍历达到要求后然后终止循环,但是感觉还是比较麻烦。总之要达到的目的是,相邻的成绩高的那的钱肯定比成绩低的钱多。那么是否可以通过一次主要遍历就解决问题呢?

        那么就开始第一次遍历:

        我可以给第一个开始的小组置初值为1万,然后对当前下标小组和下一个下标小组(也就是相邻)分数进行对比。无非有三种情况大于,小于和等于。其中如果当前小组分数小于下一个小组的成绩,因为单位为1万,则用下一个小组的奖金为当前小组奖金加一,因为当前小组的奖金不变,所以不会影响之前遍历过的小组奖金情况时候还符合题目中要求的情况。然后当等于时,则是两小组奖金数相等就可以。关键是当前小组奖金分数大于下一小组的分数时,因为此时可能会改动之前已经遍历过的小组的奖金数。如果大于的话,下一小组奖金数为一万,然后开始从当前小组向前检查。以当前小组为标准,如果分数大于后一个小组,而奖金数却不大于后一个小组的话则让其奖金加一。

        大致思路就是这样!开始编码调试。。。 。。。

实现代码:

#include 
int main(){ int n,i,k; scanf("%d",&n); //输入个数 int number[n]; int money[n]; for(i=0;i
= 0 ; -- k ) { //检查i(从i开始),是否需要增加奖金 if ( number[k - 1] > number[k] && money[k - 1] <= money[k] ) money[k - 1] += 1 ; } } } int result = 0 ; for ( i = 0; i < n; ++ i ) { result += money[i] ; } printf("%d\n",result); return 0;}
调试成功!

转载于:https://www.cnblogs.com/chxuan/p/8232097.html

你可能感兴趣的文章
贡院赶考品“怪”美食 海内外家庭千年古城寻年味
查看>>
导演袁德旺:春节以另一种方式为网友呈现“伴随式”晚会
查看>>
韩媒:韩美日官员或在日共聚讨论韩日舰机矛盾
查看>>
交通部:《收费公路管理条例》修订草案收到272条意见
查看>>
探访铁路春运“隐形人” 守护旅客平安回家路
查看>>
荣耀总裁赵明:今年俄罗斯手机市场份额目标是第一
查看>>
1段代码让你学会Java连接MySQL数据库增删改查
查看>>
进程、线程和协程
查看>>
用LiveDataBus替代RxBus、EventBus——Android消息总线的演进之路
查看>>
理解分布式事务
查看>>
评估Kubernetes中的Serverless框架
查看>>
DDFE 技术周刊(第七期)2016.12.16
查看>>
Android平台图像压缩方案
查看>>
nginx配置文件
查看>>
我扒了Bugly的数据,只是想出个报表
查看>>
干货!撸一个webpack插件(内含tapable详解+webpack流程)
查看>>
Flutter实战之实现一个简单的新闻阅读器
查看>>
推荐30个用于微服务的顶级工具
查看>>
Vector 源码分析
查看>>
计算机网络第三篇【数据链路层】
查看>>