标题: [数值计算] 29CM长的尺子,刻7个刻度,量出1~29CM的各种长度,问应怎样刻? [打印本页]
作者: curious 时间: 2009-6-20 09:37 标题: 29CM长的尺子,刻7个刻度,量出1~29CM的各种长度,问应怎样刻?
一根29CM长的尺子,只允许在上面刻7个刻度,要能用它量出1~29CM的各种长度。试问应怎样选择刻度?(小学组竞赛题)
[ 本帖最后由 curious 于 2009-6-20 09:40 编辑 ]
作者: defanive 时间: 2009-6-20 10:37
不知道我的理解正确否?
参考2进制,在1,2,4,8,16CM处刻就可以了,也就是说刻这5个刻度就能任意量1-31CM的长度
作者: x9tiancmd 时间: 2009-6-20 14:43
楼主的命题有点问题吧, 应当要加个"一次性量"出1~29CM , 不然我就刻一个一厘米的 , 只要你有愚公精神把地球量一圈都行
楼上的和我想的差不多,但是也做不到一次性量出1~29CM 无论你怎么刻尺子,
1 2 1+2=3 4 1+4=5 4+2=6 1+2+4=7 8 1+8=9 2+8=10 1+2+8=11 4+8=12 1+4+8=13 2+4+8=14 1+2+4+8=15 16 1+16=17 .............如此下去
因为是刻在尺子上不能任意组合数字所以
1 2 4 8 16 是一次性量不出来的
呵呵
[ 本帖最后由 x9tiancmd 于 2009-6-20 14:53 编辑 ]
作者: terse 时间: 2009-6-20 16:42
1 4 10 16 17 22 27
这样算对不
作者: curious 时间: 2009-6-20 17:17
确定问题解的条件:要判断能否将1~29cm的刻度量出来,应先计算a1~a7刻度所能确定的长度。假定a1<a2<a3<a4<a5<a6<a7,那么可以确定的长度为:
a1, 29-a1; 2
a2, a2-a1,29-a2; 3
a3,a3-a2, a3-a1,29-a3; 4
a4,a4-a3,a4-a2, a4-a1,29-a4; 5
a5,a5-a4,a5-a3,a5-a2, a5-a1,29-a5; 6
a6,a6-a5,a6-a4,a6-a3,a6-a2, a6-a1,29-a6; 7
a7,a7-a6,a7-a5,a7-a4,a7-a3,a7-a2, a7-a1,29-a7; 8
能构成的刻度总数为2+3+4+5+6+7+8=35种,但有重复,也不能保证1~29。
可以用标记数组B[1]~b[29]=0 或1的方法来确定某个刻度的可测性。
作者: slore 时间: 2009-6-21 11:02
9 楼njwangchuan(川儿)回复于 2005-10-19 07:42:49 得分 0
下定论了我:
1 3 6 13 20 24 28
1 5 9 16 23 26 28(上面的镜象解)
1 2 14 18 21 24 27(2 5 8 11 15 27 28)
1 4 10 16 22 24 27(2 5 7 13 19 25 28)
全部六组解,不用再争了,且29是7个刻度的极限了~~
代码是JAVA的。
感觉思维被局限了,不一定是要连续解出。。。
不是说给出前3个刻度就要算出这3个刻度以前的。。。
比如第一组4,5都是由后面的刻度记录的。
有时候还是写个程序让它跑起来给结果比自己想的好。
人脑太慢了。。。
作者: curious 时间: 2009-6-21 16:32 标题: pascal代码,是典型穷举法
- Program p2;
- Const n=29; m=1;
- Var a:array[1..7] of integer;
- B:array[1..n] of 0..1;
- F:boolean;
- I,j:integer;
- Begin
- a[1]:=m;
- for a[2]:=2 to n-7 do
- for a[3]:=a[2]+1 to n-6 do
- for a[4]:=a[3]+1 to n-5 do
- for a[5]:=a[4]+1 to n-4 do
- for a[6]:=a[5]+1 to n-3 do
- for a[7]:=a[6]+1 to n-2 do
- begin
- for i:=1 to 29 do b[i]:=0;
- for i:=1 to 7 do
- begin
- b[a[i]]:=1;b[n-a[i]]:=1;b[n]:=1;{初始化}
- for j:=i+1 to 7 do b[abs(a[j]-a[i])]:=1
- end;
- j:=0;
- for i:=1 to n do j:=j+b[i];
- if j=n then begin
- for i:=1 to 7 do write(a[i]:4); writeln;
- end;
- end;
- end.
复制代码
欢迎光临 批处理之家 (http://bbs.bathome.net/) |
Powered by Discuz! 7.2 |