[新手上路]批处理新手入门导读[视频教程]批处理基础视频教程[视频教程]VBS基础视频教程[批处理精品]批处理版照片整理器
[批处理精品]纯批处理备份&还原驱动[批处理精品]CMD命令50条不能说的秘密[在线下载]第三方命令行工具[在线帮助]VBScript / JScript 在线参考
返回列表 发帖

[数值计算] 29CM长的尺子,刻7个刻度,量出1~29CM的各种长度,问应怎样刻?

    一根29CM长的尺子,只允许在上面刻7个刻度,要能用它量出1~29CM的各种长度。试问应怎样选择刻度?(小学组竞赛题)

[ 本帖最后由 curious 于 2009-6-20 09:40 编辑 ]

确定问题解的条件:要判断能否将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的方法来确定某个刻度的可测性。

TOP

pascal代码,是典型穷举法

  1. Program  p2;
  2. Const  n=29; m=1;
  3. Var a:array[1..7] of integer;
  4.     B:array[1..n] of 0..1;
  5.     F:boolean;
  6.     I,j:integer;
  7. Begin
  8.    a[1]:=m;
  9.    for a[2]:=2 to n-7 do
  10.     for a[3]:=a[2]+1 to n-6 do
  11.       for a[4]:=a[3]+1 to n-5 do
  12.         for a[5]:=a[4]+1 to n-4 do
  13.            for a[6]:=a[5]+1 to n-3 do
  14.               for a[7]:=a[6]+1 to n-2 do
  15.                 begin
  16.                  for i:=1 to 29 do b[i]:=0;
  17.                  for i:=1 to 7 do
  18.                    begin
  19.                      b[a[i]]:=1;b[n-a[i]]:=1;b[n]:=1;{初始化}
  20.                      for j:=i+1 to 7 do b[abs(a[j]-a[i])]:=1
  21.                    end;
  22.                  j:=0;
  23.                  for i:=1 to n do j:=j+b[i];
  24.                  if  j=n then begin
  25.                    for i:=1 to 7 do write(a[i]:4);    writeln;
  26.                    end;
  27.                end;
  28. end.
复制代码

TOP

返回列表