下列程序段的执行结果为()。 Dim m(10),n(10) I=3 For I=1 to 5 M(t)=t N(I)=2*I+t Next t Print n(I);m(I)
A.3 11
B.3 15
C.11 3
D.15 3
A.10"look" 20't'<CR>
B.10"look"10
C.10 look 20 t
D.10<CR>look20<CR>t<CR>
试题四(共15分)
阅读下列说明和C代码,回答问题1至问题3,将解答写在答题纸的对应栏内。
【说明】
设有n个货物要装入若干个容量为C的集装箱以便运输,这n个货物的体积分别为{S1,S2,...,Sn},且有si≤C(1≤i≤ n)。为节省运输成本,用尽可能少的集装箱来装运这n个货物。
下面分别采用最先适宜策略和最优适宜策略来求解该问题。
最先适宜策略(firstfit)首先将所有的集装箱初始化为空,对于所有货物,按照所给的次序,每次将一个货物装入第一个能容纳它的集装箱中。
最优适宜策略(bestfit)与最先适宜策略类似,不同的是,总是把货物装到能容纳它且目前剩余容量最小的集装箱,使得该箱子装入货物后闲置空间最小。
【C代码】
下面是这两个算法的C语言核心代码。
(1)变量说明
n:货物数
C:集装箱容量
s:数组,长度为n,其中每个元素表示货物的体积,下标从0开始
b:数组,长度为n,b[i]表示第i+1个集装箱当前已经装入货物的体积,下标从0开始
i,j:循环变量
k:所需的集装箱数
min:当前所用的各集装箱装入了第i个货物后的最小剩余容量
m:当前所需要的集装箱数
temp:临时变量
(2)函数firstfit
int firstfit(){
inti,j;
k=0:
for(i=0;i<n;i++){
b[i]=0;
}
for(i=0;i<n;i++){
(1);
while(C-b[j]<s[i]){
j++;
}
(2);
k=k>(j+1)?k:(j+1);
}
returnk;
}
(3)函数bestfit
int bestfit() {
int i,j,min,m,temp;
k=0;
for(i=0;i<n;i++){
b[i]=0;
}
For (i=0;i<n;i++){
min=C;
m=k+l;
for(j=O;j< k+l;j++){
temp=C- b[j] - s[i];
if(temp>0&&temp< min){
(3) ;
m=j,
}
}
(4);
k=k>(m+1)?k:(m+1);
}
return k;
}
【问题1】(8分)
根据【说明】和【C代码】,填充C代码中的空(1)~(4)。
【问题2】(4分)
根据【说明】和【C代码】,该问题在最先适宜和最优适宜策略下分别采用了(5) 和(6)算法设计策略,时间复杂度分别为 (7) 和 (8)(用O符号表示)。
【问题3】(3分)
考虑实例n= 10,C= 10,各个货物的体积为{4,2,7,3,5,4,2,3,6,2}。该实例在最先适宜和最优适宜策略下所需的集装箱数分别为(9)和(10)。考虑一般的情况,这两种求解策略能否确保得到最优解?(11) (能或否)
阅读以下说明和C语言函数,将应填入(n)处的字句写在对应栏内。
[说明]
如图所示的一圆圈上分布6个环,请在每个环中填一个数字,使得从任一环开始按顺时针所得的六位数与按逆时针所得的6位数都为素数。
[函数]
main ()
{
int i, j, a, b, k;
long m,m1,n,t,u,v;
for (n=100001;n<999999;n+2 ) /* n穷举所有 6位奇数*/
{
a=0;(1); /* 设 m 为一个顺转6 位数*/
for (i=1; i<=6; i++ )
{t=-m/1000000;(2);
for (v=u,m1=0,k=1;k<=5;k++ )
{b=v%10;v=v/10;m1=m1*m1* 10+b;}
(3); /*m1 为相应的逆转 6 位数*/
/* m 为顺圈数, m1 为逆圈数*/
for (j=2; j<=999;j++ )
if (m%j==0||.(4)) /* 判别 m,m1 是否为素数*/
{ a= 1; break; }
(5); /*原m 转一环得新顺转数m*/
/*原 m 转一环得新顺圈数m*/
if (a==1) break;}
if (a==0 )
{prinff ("%1d\n",n ) ;break;}
}
}
在窗体上画一个命令按钮,然后编写如下事件过程:
Sub BTC(oldCopy() As Integer, newCopy() As Integer)
Dim i As Integer
For i=LBound(oldCopy() ) To UBound(oldCopy() )
newCopy(i) =oldCopy(i)
Next i
End Sub
Private Sub Command1_Click()
Dim m(10) As Integer, n(10) As Integer
For i=1 To 10
m(i) =i i
Next i
Call BTC(m, n)
Print n(5)
End Sub
程序运行后,单击命令按钮输出结果为()。
A.0
B.2
C.10
D.25
在窗体上画一个命令按钮,然后编写如下事件过程: Sub BTC(old Copy() As Integer,new Copy() As Integer) Dim i AS Integer For i=LBound(oldCopy())To UBound(oldCopy()) newCopy(i)=oldCopy(i) Next i End Sub Private Sub Command1 _ Click() Dimm(10) As Integer,n(10)As Integer For i=1 To 10 m(i) =i*i Next i Call BTC(m,n) Print n(5) End Sub 程序运行后,单击命令按钮输出结果为
A.0
B.2
C.10
D.25
【程序说明】 计算1~30之间能够被3整除的奇数的阶乘和。
【程序】
** 主程序
SET TALK OFF
S=0
FOR I=1 TO 30 STEP 2
IF (4)
(5)
S=S+N
ENDIF
ENDFOR
?“1到30之间能被3整除的奇数阶乘和为:”+ (6)
SET TALK ON
RETURN
** 过程 P1.PRG
PARAMETERS M
(7)
N=1
FOR J=1 TO M
N=N*J
ENDFOR
(8)
(4)
A.MOD(I,3)>=0
B.MOD(I,3)>0
C.MOD(I,3)<>0
D.MOD(I,3)=0
当Form1_Click事件发生时,写出在窗体上显示的第二行和第三行是()。 Private a As Integer,c As Integer Private Sub Form_Click() Dim a As Integer,b As Integer a=10:b=10:c=10 Print a,b,c Call test1(a,B)Print a,b,c End Sub Private Sub test1(m As Integer,ByVal n As Integer) Dim c As Integer m=5:n=5:c=5 Print m,n,c End Sub
A.5 5 5 5 10 10
B.5 5 5 5 5 10
C.5 5 10 5 10 10
D.5 5 5 10 10 10