A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

本帖最后由 郭宁 于 2012-6-3 21:34 编辑

例一:
比如输入一个时间“12:18” 在给定String数组里面找到离这个时间最接近的时间,并输出
给定数组里面的值大致是这样的{“01:16”,“06:22”“14:54”“13:35”“12:19”“12:20” }
例二:
5个海盗抢到了100颗宝石,每一颗都一样的大小和价值连城。
他们决定这么分:
1。抽签决定自己的号码(1,2,3,4,5)
2。首先,由1号提出分配方案,然后大家5人进行表决,当且仅当半数和超过半数的人同意时,按照他的提案进行分配,否则将被扔入大海喂鲨鱼。
3。如果1号死后,再由2号提出分配方案,然后大家4人进行表决,当且仅当半数和超过半数的人同意时,按照他的提案进行分配,否则将被扔入大海喂鲨鱼。
4。以次类推......

条件:
每个海盗都是很聪明的人,都能很理智的判断得失,从而做出选择。

问题:
第一个海盗提出怎样的分配方案才能够使自己的收益最大化

评分

参与人数 1黑马币 +6 收起 理由
袁錦泰 + 6 赞一个!

查看全部评分

3 个回复

倒序浏览
伤不起啊!
回复 使用道具 举报
呵呵  有意思
第一个的话我的想法是这样的 对于{“01:16”,“06:22”“14:54”“13:35”“12:19”“12:20” }每一个有;分隔符分割成两部分如(i;j)i*60+j的到分钟数
然后和12*60+18=738 做减法取绝对值match.abs() 谁最小就离得最近

第二个的话
不管怎样后一个人为了自己的利益最大化总会去反对前一个人叫他去见鲨鱼,就是
2反对1,3反对2,4反对3,5反对4
从后往前看假设前边的人都死了就剩下4和5
那么4号会这样分  100:0  因为他自己赞同就行了  半数 通过
再往前推,3好还活着,3号只要回争取当自己喂鱼后一个宝石也得不到的5号就行了
那么3号会这样分  99:0:1  5还得到一个宝石总比不得到好 所以5好赞同 再加上3号 过半  通过
再往前推,2号也活着  2号会争取当自己喂鱼后的不到宝石的4号就行了
那么2号会这样分  99:0:1:0  4号会赞同 自己赞同 半数  通过
再往前推 ,1号活者  就回去争取当自己喂鱼后得不到宝石的3好和5号就可以了
那么1号会这样分  98:0:1:0 :1 自己赞同 3号会赞同 5好赞同 过半  通过

评分

参与人数 1黑马币 +6 收起 理由
袁錦泰 + 6 很给力!

查看全部评分

回复 使用道具 举报
  1. public static void main(String[] args) {
  2.         /**
  3.          * 比如输入一个时间“12:18” 在给定String数组里面找到离这个时间最接近的时间,并输出
  4.          * 给定数组里面的值大致是这样的{“01:16”,“06:22”“14:54”“13:35”“12:19”“12:20” }
  5.          *
  6.          * 思路:
  7.          * 1. 将时间转成整数
  8.          * 2. 排序
  9.          * 3. 比较
  10.          */

  11.         String[] times = {"01:16", "06:22", "14:54", "13:35", "12:17", "12:20"};
  12.        
  13.         //1. 转成整数
  14.         int[] intTimes = new int[times.length];
  15.         for (int i = 0; i < times.length; i++) {
  16.                 intTimes[i] = Integer.valueOf(times[i].replace(":", ""));
  17.         }
  18.        
  19.         //2. 排序
  20.         Arrays.sort(intTimes);
  21.        
  22.         //输入时间
  23.         Scanner scan = new Scanner(System.in);
  24.         System.out.print("请输入时间:");
  25.         String input = scan.nextLine();
  26.         scan.close();
  27.         //验证输入的时间
  28.         if (!input.matches("(\\d|(1\\d)|(2[0-4])):[0-5]\\d")) {
  29.                 System.out.println("输入的时间格式不正确");
  30.                 return;
  31.         }

  32.         int intResult = 0;
  33.         int intInput = Integer.valueOf(input.replace(":", ""));
  34.        
  35.         //3. 比较
  36.         for (int i = 0; i < intTimes.length; i++) {
  37.                 if (intTimes[i] > intInput) {
  38.                         if (i == 0) {
  39.                                 intResult = intTimes[i];
  40.                                 break;
  41.                         } else {
  42.                                 intResult = (intInput - intTimes[i - 1]) < (intTimes[i] - intInput) ? intTimes[i - 1] :
  43.                                                 intTimes[i];
  44.                                 break;
  45.                         }
  46.                 } else if (i == intTimes.length - 1) {
  47.                         intResult = intTimes[i];
  48.                 }
  49.         }

  50.         //得出结果
  51.         String result = new DecimalFormat("00,00").format(intResult).replace(",", ":");
  52.         System.out.println("最近的时间:" + result);
  53. }
复制代码
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马