Topcoder_4

来源:互联网 发布:淘宝减肥药事件 编辑:程序博客网 时间:2024/05/20 06:06
【问题描述】
    当准备一组题目的时候,出题者必须同时考虑每个问题的难度和长度。一组分配得比较好的问题一般是一道简单题、一道中等题和一道难题,并且不能花费太长或太短的时间完成题目。
    现在给定三个int数组。第一个数组包含简单题目所需要的时间,第二个是中等题的,第三个是难题的。返回满足如下要求的组合个数。必须分别包含一道简单、中等、难题,并且花费的总时间在60至75之间(包括)。

 定义:
    类  Chooser
    方法  public int numSets(int[] easy, int[] middle, int[] hard)

 约束:
1、每个数组包括0至10个元素(包括)
2、容易题数组的时间范围是5至15(包括)
3、中等题数组的时间范围是15至45(包括)
4、难题数组的时间范围是30至55(包括)

 测试用例:
1、{5,10,15} {15,25} {45}
Return   4
2、{5,5,5} {15,15,15} {45,45,35}
Return   18
2、{} {15,25} {30,35,40}
Return   0
  1. import java.util.Arrays;
  2. public class Chooser {
  3.     public int numSets(int[] easy, int[] middle, int[] hard) {
  4.         int count = 0;
  5.         if (easy.length == 0 || middle.length == 0 || hard.length == 0)
  6.             return 0;
  7.         Arrays.sort(easy);
  8.         Arrays.sort(middle);
  9.         Arrays.sort(hard);
  10.         if (easy[easy.length - 1] + middle[middle.length - 1] + hard[hard.length - 1] <= 75
  11.                 && easy[easy.length - 1] + middle[middle.length - 1] + hard[hard.length - 1] >= 60
  12.                 && easy[0] + middle[0] + hard[0] >= 60)
  13.             return easy.length * middle.length * hard.length;
  14.         
  15.         int flag=0;
  16.         for (int i = 0; i < easy.length; i++) {
  17.             for (int k = 0; k < middle.length; k++) {
  18.                 flag=0;
  19.                 for (int m = 0; m < hard.length; m++) {
  20.                     if (easy[i] + middle[k] + hard[m] <= 75 && easy[i] + middle[k] + hard[m] >= 60){
  21.                         count++;
  22.                     }else if(easy[i] + middle[k] + hard[m] >75){
  23.                         if(m==0)
  24.                             flag =1;
  25.                         break;
  26.                     }
  27.                 }
  28.                 if(flag==1)
  29.                     break;
  30.             }
  31.         }
  32.         return count;
  33.     }
  34. }

原创粉丝点击