maoyong1023 于 2008-10-23 13:51:44发表:
for(int i = 1;i <= 100;i += 10) { if(drop(i) == BROKEN) { n = i - 10; if(n < 1) n = 1; while(1) { if(drop(n) == UNBROKEN) { n++; } else { printf("分界线就是:%d\n",n-1); break; } } } }
deepmist 于 2008-10-06 18:45:32发表:
1楼的想法
chris078426 于 2008-10-06 13:01:26发表:
(hl):hao
chris078426 于 2008-10-06 13:00:38发表:
):o:s
天明 于 2008-10-05 10:40:36发表:
我觉得有点想脑筋急转弯,n应该一层吧
changheluori 于 2008-09-26 19:29:12发表:
间隔10层的原因我已经说了 测的总次数N=100/m + m (m就是间隔的层数) 数学易知100/m = m 时 N 取最小值 即m=10时 N最小
zl2054890 于 2008-09-26 10:23:57发表:
引用:原帖由 changheluori 于 2008-9-26 08:41 发表 一楼的方法是最优的 一楼的方法 如果100楼最多需要20扔次 10000层楼 最多须200 复杂度为n的1/2次方 三楼的方法 100 最多扔100 10000层楼 最多仍10000 -1 ...
zl2054890 于 2008-09-26 10:20:41发表:
忘了说了,还有一个条件就是,测试的次数要最少。说白了就是隔多少层测一次。像二楼说的,是以十层为间隔测试,会不会有更好的方法使测试次数更少呢?
changheluori 于 2008-09-26 08:41:35发表:
一楼的方法是最优的 一楼的方法 如果100楼最多需要20扔次 10000层楼 最多须200 复杂度为n的1/2次方 三楼的方法 100 最多扔100 10000层楼 最多仍10000 -1 复杂度为n 所以一楼最优
wolecho 于 2008-09-25 22:15:36发表:
你没有限定扔多少次,我只要一个瓶子,从第二层开始扔。 哪一层碎了N就是下面那一层
lmguy 于 2008-09-25 13:16:49发表:
往下扔的时候没有初速度,往上扔的时候有初速度
changheluori 于 2008-09-25 09:54:27发表:
我的想法:“从这层扔下去的瓶子,着地后会毫发无损,但从这层往上扔下的瓶子就会摔碎“ 这句话的意思是说如果第n层是分界线的话那么从第n层仍一个瓶子不会碎 从第n+1层仍就会碎了 那么 可以从第10层仍 如果期间瓶子没有碎(既然没有碎就可以重复利用) 则每增加10层再仍一次 如果在第n层仍的碎了 就在第n-10层在仍另外一个瓶子仍完再从n-9层仍 n-8 n-7层直到n-i层瓶子碎了 那么n-i-1就是分界线 问题在于为什么是第一个瓶子要每隔十层仍一次 原因在下面 总的次数 N=(100/m + m)当 100/m=m 时候N最小
maoyong1023 于 2008-10-23 13:51:44发表:
for(int i = 1;i <= 100;i += 10)
{
if(drop(i) == BROKEN) {
n = i - 10;
if(n < 1)
n = 1;
while(1) {
if(drop(n) == UNBROKEN) {
n++;
}
else {
printf("分界线就是:%d\n",n-1);
break;
}
}
}
}
deepmist 于 2008-10-06 18:45:32发表:
1楼的想法
chris078426 于 2008-10-06 13:01:26发表:
(hl):hao
chris078426 于 2008-10-06 13:00:38发表:
):o:s
天明 于 2008-10-05 10:40:36发表:
我觉得有点想脑筋急转弯,n应该一层吧
changheluori 于 2008-09-26 19:29:12发表:
间隔10层的原因我已经说了
测的总次数N=100/m + m (m就是间隔的层数)
数学易知100/m = m 时 N 取最小值
即m=10时 N最小
zl2054890 于 2008-09-26 10:23:57发表:
用复杂度作为衡量标准很不错
zl2054890 于 2008-09-26 10:20:41发表:
忘了说了,还有一个条件就是,测试的次数要最少。说白了就是隔多少层测一次。像二楼说的,是以十层为间隔测试,会不会有更好的方法使测试次数更少呢?
changheluori 于 2008-09-26 08:41:35发表:
一楼的方法是最优的
一楼的方法 如果100楼最多需要20扔次 10000层楼 最多须200 复杂度为n的1/2次方
三楼的方法 100 最多扔100 10000层楼 最多仍10000 -1 复杂度为n
所以一楼最优
wolecho 于 2008-09-25 22:15:36发表:
你没有限定扔多少次,我只要一个瓶子,从第二层开始扔。
哪一层碎了N就是下面那一层
lmguy 于 2008-09-25 13:16:49发表:
往下扔的时候没有初速度,往上扔的时候有初速度
changheluori 于 2008-09-25 09:54:27发表:
我的想法:“从这层扔下去的瓶子,着地后会毫发无损,但从这层往上扔下的瓶子就会摔碎“ 这句话的意思是说如果第n层是分界线的话那么从第n层仍一个瓶子不会碎 从第n+1层仍就会碎了
那么 可以从第10层仍 如果期间瓶子没有碎(既然没有碎就可以重复利用) 则每增加10层再仍一次 如果在第n层仍的碎了 就在第n-10层在仍另外一个瓶子仍完再从n-9层仍 n-8 n-7层直到n-i层瓶子碎了 那么n-i-1就是分界线
问题在于为什么是第一个瓶子要每隔十层仍一次 原因在下面
总的次数 N=(100/m + m)当 100/m=m 时候N最小