package com.wt;
/**
搜狐笔试题
题目描述
小狐进行了一次黑客马拉松大赛,全公司一共分为了N个组,每组一个房间排成一排开始比赛,
比赛结束后没有公布成绩,但是每个组能够看到自己相邻的两个组里比自己成绩低的组的成绩,
比赛结束之后要发奖金,以1w为单位,每个组都至少会发1w的奖金,另外,如果一个组发现自
己的奖金没有高于比自己成绩低的组发的奖金,就会不满意,作为比赛的组织方,根据成绩计
算出至少需要发多少奖金才能让所有的组满意。
输入描述:
每组数据先输入N,然后N行输入N个正整数,每个数表示每个组的比赛成绩。
输出描述:
输出至少需要多少w的奖金
思路:新建两个数组,第一个数组用来存储成绩,第二个数组用来存储对应的奖金,第二个数组初始化为1
*/
public class Bonus {
public static void main(String[] args)
{
// int[] score = new int[]{20,32,12,32,45,11,21,31,41,33};
int[] score = new int[]{50,40,30,50,60,10};
int[] result = compare(score);
for(int i = 0;i < result.length;i ++)
{
System.out.println(result[i]);
}
}
//传入分数数组
public static int[] compare(int[] score)
{
int[] bonus = new int[score.length];
//每一队至少发1万奖金,初始化数组
for(int i = 0;i < score.length;i++)
{
bonus[i] = 1;
}
for (int i = 0;i < score.length;i ++)
{
if(i == 0)
{
if(score[0] > score[1])
{
bonus[0] = bonus[1] + 1;
}
}
else if(i == score.length-1)
{
if(score[score.length - 1] > score[score.length - 2])
{
bonus[score.length - 1] = score[score.length - 2] + 1;
}
}
else
{
//如果大于它左边的成绩
if(score[i] > score[i -1])
{
//大于左边的成绩,看它的奖金是否也大于左边的
if(bonus[i] <= bonus[i -1])
{
bonus[i] = bonus[i-1] + 1;
}
}
//如果大于它右边的成绩
if(score[i] > score[i + 1])
{
//大于它右边的成绩,看它的奖金是否也大于右边的
if(bonus[i] <= bonus[i + 1])
{
//调整奖金
bonus[i] = bonus[i + 1] + 1;
//调整奖金后,看看前面的奖金是否还满足要求
for(int j = i; j > 0;j --)
{
if(score[j - 1] > score[j])
{
if(bonus[j - 1] >= bonus[j])
{
bonus[j - 1] = bonus[j] + 1;
}
}
}
}
}
}
}
return bonus;
}
}
【搜狐】根据成绩计 算出至少需要发多少奖金才能让所有的组满意
最新推荐文章于 2019-06-11 23:46:57 发布