阅读以下程序说明和C程序,将程序段中(1)~(7)空缺处的语句填写完整。【说明】【C程序1】用回溯算法来产生由0或1组成的2m个二进位串,使该串满足以下要求。视串为首尾相连的环,则由m位二进制数字组成的2m个子序列,每个可能的子序列都互不相同。例如,如果m=3,在串11101000首尾相连构成的环中,由3位二进制数字组成的每个可能的子序列都在环中恰好出现一次,它们依次是111,110,101,010,100,000,001,011,如图2-14所示。【C程序2】是求“背包问题”的一组解的递归算法程序。“背包问题”的基本描述是:有一个背包,能盛放的物品总重量为S,设有N件物品,其重量分别为W1,W2,…,Wn,希望从N件物品中选择若干件物品,所选物品的重量之和恰能放入该背包,即所选物品的重量之和等于S。【C程序1】define N 1024define M 10int b [N+M-1]int equal(int k, int j int m) {int i;for(i=0; i<m; i++if ( b[ k + i] (1) )return 0;return 1; }int exchange (int k, int m, int v){while ( b[ k + m - 1 ) == v ) {b[ kncm--i]=! v (2);}(3)=v;return k;}init ( iht v) {int kfor( k = 0;K = N + M - 1;k++)b[k] = v;}main ( ) {int m, v, k, n, j;printf ('Enter m (l<m<10) , v v=0, v=1)\ n") ;scanf (" %d%d , m, v);n = 0x01 << m;init (!v);k=0;while((4)< n)for (j=0;j<k;j++)if (equal (k, j, m)) {k=exchange (k, m, v)j=(5);}for (k= 0 ;k<n ;k++ )print{ (" %d\ n" , b[k]) ;}}【C程序2】include<stdio. h>define N 7define S 15int w[N+1] = {0, 1, 4, 3, 4, 5, 2, 7};int knap (int S, int n){if (S == 0)return 1;if (s<0 || (s>0 n<1))return 0;if ((6))) {printf( "4d", w[n]);return 1;}return (7)}main ( ) {if (knap (S, N)printf("OK:\n");elseprintf("NO!\n")}
阅读以下程序说明和C程序,将程序段中(1)~(7)空缺处的语句填写完整。
【说明】
【C程序1】用回溯算法来产生由0或1组成的2m个二进位串,使该串满足以下要求。
视串为首尾相连的环,则由m位二进制数字组成的2m个子序列,每个可能的子序列都互不相同。例如,如果m=3,在串11101000首尾相连构成的环中,由3位二进制数字组成的每个可能的子序列都在环中恰好出现一次,它们依次是111,110,101,010,100,000,001,011,如图2-14所示。
【C程序2】是求“背包问题”的一组解的递归算法程序。“背包问题”的基本描述是:有一个背包,能盛放的物品总重量为S,设有N件物品,其重量分别为W1,W2,…,Wn,希望从N件物品中选择若干件物品,所选物品的重量之和恰能放入该背包,即所选物品的重量之和等于S。
【C程序1】
define N 1024
define M 10
int b [N+M-1]
int equal(int k, int j int m) {
int i;
for(i=0; i<m; i++
if ( b[ k + i] (1) )
return 0;
return 1; }
int exchange (int k, int m, int v){
while ( b[ k + m - 1 ) == v ) {
b[ kncm--i]=! v (2);
}
(3)=v;
return k;
}
init ( iht v) {
int k
for( k = 0;K = N + M - 1;k++)
b[k] = v;
}
main ( ) {
int m, v, k, n, j;
printf ('Enter m (l<m<10) , v v=0, v=1)\ n") ;
scanf (" %d%d , &m, &v);
n = 0x01 << m;
init (!v);
k=0;
while((4)< n)
for (j=0;j<k;j++)
if (equal (k, j, m)) {
k=exchange (k, m, v)
j=(5);
}
for (k= 0 ;k<n ;k++ )
print{ (" %d\ n" , b[k]) ;
}
}
【C程序2】
include<stdio. h>
define N 7
define S 15
int w[N+1] = {0, 1, 4, 3, 4, 5, 2, 7};
int knap (int S, int n){
if (S == 0)
return 1;
if (s<0 || (s>0 && n<1))
return 0;
if ((6))) {
printf( "4d", w[n]);
return 1;
}
return (7)
}
main ( ) {
if (knap (S, N)
printf("OK:\n");
else
printf("NO!\n")
}