问题 填空题

某人沿一条直路用1小时走完了6千米路程,休息半小时后又用1小时继续向前走了4千米路程,这人在整个过程中的平均速度是______千米/小时.

答案

某人全程的路程是s=6km+4km=10km,

全程的时间是t=1h+0.5h+1h=2.5h,

某人在整个过程中的平均速度是v=

s
t
=
10km
2.5h
=4km/h.

故答案为:4.

问答题

[说明]
以下[C程序]所完成的功能是在3X3方格中填入数字1~N(N≥10)内的某9个互不相同的整数,使所有相邻两个方格内的两个整数之和为质数。系统输出满足该要求的所有填法。系统的部分输出结果如图3-18所示。


图3-18 系统的部分输出结果
3×3方格从第1行左上角方格开始的序号分别为0、1、2,第2行左边方格开始的序号分别为3、4、 5,第3行左下角方格开始的序号分别为6、7、8。以下[C程序]采用试探法,即从序号为0的方格(左上角)开始,为当前方格寻找一个合理的可填整数,并在当前位置正确填入后,为下一方格寻找可填入的合理整数。如不能为当前方格寻找一个合理的可填整数,就要后退到前一方格,调整前一方格的整数。直至序号为8的方格(右下角)也填入合理的整数时,就找到了一个解,将该解输出,并调整序号为8的方格所填的整数,继续去找下一个解。
为了检查当前方格的填入整数的合理性,C程序引入二维数组checkMatrix,用于存放需要进行合理性检查的相邻方格的序号。
[C程序]
#include <stdio.h>
#define N 12
int a [9]; /* 用于存储方格所填入的整数 */
int b[N+1];
int pos;
checkMatrix[][3] = -1,0,-1,1,-1,0,-1,1,3,-1,2,4,-1,3,-1 4,6,-1, 5,7,-1;
void write(int a[])
int i, j;
for ( i = 0; i < 3; i++)
for ( j = 0; j < 3; j++)
printf("%3d",a[3*i+j]);
printf("\n");


int isPrime(int m)
int i;
if (m == 2)
return 1;
if (m == 1 || m % 2 == 0)
return 0;
for (i = 3; i * i <= m; )
if (m % i == O)
return 0;
i+ =2;

return 1;

int selectNum(int start)
int j;
for (j = start; j <= N; j++)
if (b[j])
return j;
return 0;

int check ( ) /* 检查填入pos位置的整数是否合理 */
int i, j;
for (i = 0; (j = (1) ) >= 0; i++)
if (!isPrime(a[pos] + a[j]))
(2) ;
(3) ;

extend ()/* 为下一方格找一个尚未使用过的整数 * /
a[ (4) ] = selectNum(1);
b[a[pos]] = 0;

void change() /* 为当前方格找下一个尚未使用过的整数(找不到回溯) */
int j;
while (pos >= 0 && (j = selectNum( (5) )) == 0
(6) ;
if (pos < 0)
return;
b[a[pos]] = 1;
a[pos] = j;
b[j] = 0;

find ( )
int ok = 1;
pos = 0; a[pos] = 1; b[a[pos]] = 0;
de
if (ok)
if ( (7) )
write (a);
change( );

else
extend( );
else
change( );
ok = check(pos);
while (pos >=0);

main( )
int i;
for (i = 1; i <=N; i++)
b[i] = 1;
find( );

单项选择题