黑马程序员技术交流社区
标题:
转CSDN的几个个问题,大家换换脑子,练练算法呗!
[打印本页]
作者:
郭宁
时间:
2012-6-3 21:30
标题:
转CSDN的几个个问题,大家换换脑子,练练算法呗!
本帖最后由 郭宁 于 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。以次类推......
条件:
每个海盗都是很聪明的人,都能很理智的判断得失,从而做出选择。
问题:
第一个海盗提出怎样的分配方案才能够使自己的收益最大化
作者:
杜俊彪
时间:
2012-6-3 22:04
伤不起啊!
作者:
张頔
时间:
2012-6-3 22:40
呵呵 有意思
第一个的话我的想法是这样的 对于{“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好赞同 过半 通过
作者:
张少威
时间:
2012-6-4 10:52
public static void main(String[] args) {
/**
* 比如输入一个时间“12:18” 在给定String数组里面找到离这个时间最接近的时间,并输出
* 给定数组里面的值大致是这样的{“01:16”,“06:22”“14:54”“13:35”“12:19”“12:20” }
*
* 思路:
* 1. 将时间转成整数
* 2. 排序
* 3. 比较
*/
String[] times = {"01:16", "06:22", "14:54", "13:35", "12:17", "12:20"};
//1. 转成整数
int[] intTimes = new int[times.length];
for (int i = 0; i < times.length; i++) {
intTimes[i] = Integer.valueOf(times[i].replace(":", ""));
}
//2. 排序
Arrays.sort(intTimes);
//输入时间
Scanner scan = new Scanner(System.in);
System.out.print("请输入时间:");
String input = scan.nextLine();
scan.close();
//验证输入的时间
if (!input.matches("(\\d|(1\\d)|(2[0-4])):[0-5]\\d")) {
System.out.println("输入的时间格式不正确");
return;
}
int intResult = 0;
int intInput = Integer.valueOf(input.replace(":", ""));
//3. 比较
for (int i = 0; i < intTimes.length; i++) {
if (intTimes[i] > intInput) {
if (i == 0) {
intResult = intTimes[i];
break;
} else {
intResult = (intInput - intTimes[i - 1]) < (intTimes[i] - intInput) ? intTimes[i - 1] :
intTimes[i];
break;
}
} else if (i == intTimes.length - 1) {
intResult = intTimes[i];
}
}
//得出结果
String result = new DecimalFormat("00,00").format(intResult).replace(",", ":");
System.out.println("最近的时间:" + result);
}
复制代码
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2