不朽功勋bù xiǔ ɡōnɡ xūn

【说明】 “背包问题”的基本描述是:有一个背包,能盛放的物品总重量为S,设有N件物品,其重量分别为w1,w2,…,wn。希望从N件物品中选择若干件物品,所选物品的重量之和恰能放入该背包,即所选物品的重量之和等于S。 如下程序均能求得“背包问题”的一组解,其中程序1是“背包问题”的递归解法,而程序2是“背包问题”的非递归解法。 【程序1】 #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( (1) ){/*考虑物品n被选择的情况*/ printf("%4d",w[n]); return 1; } return (2) ;/*考虑不选择物品n的情况*/ } main( ) { if(knap(S,N))printf("OK!/n"); else printf("N0!/n"); } 【程序2】 #include<stdio.h> #define N 7 #define S 15 typedef struct{ int s; int n; int job; }KNAPTP; int w[N+1]={0,1,4,3,4,5,2,7}; int knap(int s, int n); main( ) { if(knap(S,N)) printf("0K!/n"); else printf("N0!/n"); } int knap(int s, int n) { KNAPTP stack[100],x; int top, k, rep; x.s=s;x.n=n; x.job=0; top=1; stack[top]=x; k=0; while( (3) ){ x=stack[top]; rep=1; while(!k && rep){ if(x.s==0) k=1;/*已求得一组解*/ else if(x.s<0 || x.n<=0) rep=0; else{ x.s= (4) ; x.job=1; (5) =x; } }/*while*/ if(!k){ rep=1; while(top>=1 && rep){ x=stack[top--]; if(x.job==1){ x.s +=w[x.n+1]; x.job=2; stack[++top]=x; (6) ; }/*if*/ }/*while*/ }/*if*/ /*while*/ if(k){ /*输出一组解*/ while(top>=1){ x=stack[top--]; if(x.job==1)printf("%4d/t",w[x.n+1]); } } return k; }

下面程序的运行结果是 【17】 。 #include <stdio.h> #define N 10 #define s(x) x*x #define f(x) (x*x) main( ) { int i1,i2; i1=1000/s(N); i2=1000/f(N); printf("%d %d/n",i1,i2); }

下面程序的运行结果是 【8】 【9】 。 #include<iostream.h> #define N 10 #define s( x ) x*x #define f( x ) ( x*x ) void main( ) {int i1,i2; i1=1000/s(N);i2=1000/f(N); cout <<i 1 << " " << i2; }

下面程序的运行结果是 【8】  【9】 。     #include<iostream.h>    #define N 10     #define s(x)x * x     #define f(x)(x * x)     void main( )     { int i1,i2;      i1=1000/s(N);i2=1000/f(N);      cout < < i1 < < " " < < i2;     }

下面程序的运行结果是 8 9 。 #include<iostream.h> #define N 10 #define s(x) x * x #define f(x) (x * x) void main( ) { int i1,i2; i1=1000/s(N) ;i2=1000/f(N) ; cout < < i1 < < " " < < i2; }

以下程序调用fun函数把x中的值插入到a数组下标为k的数组元素中。主函数中,n存放a数组中数据的个数。请填空。 #include void fun( int s[], int *n, int k, int x) { int i; for(i=*n-1; i>=k; i- -) s[ 【14】 ]=s[i]; s[k]=x; *n=*n+ 【15】 ; } main( ) { int a[20]={1,2,3,4,5,6,7,8,9,10,11}, i, x=0, k=6, n=11; fun(a, &n, k,x); for(i=0;i

下列各项中注音有误的一项是( )

A:桂花guì 绥靖jìng 宵衣旰食xiāo B:莹澈yíng 含辛茹苦rú 风流儒雅rú C:旭日东升xù 插曲chā 崇敬cóng D:咳嗽sòu 舔食tiǎn 功勋xūn

下列各项中注音有误的一项是( )

A: shàn 赡养老人 瞻仰fó xiàng zhān B:颤栗zhàn 功勋xūn 咳嗽sòu C:shuān 姗姗来迟 珊珊可爱shān 栅栏zhà D:shuò 众口铄金 闪烁shuò 瓦砾lì ??

下列各项中注音有误的一项是( )

A. 赡养老人shàn 瞻仰fó xiàng zhān

B.颤栗zhàn 功勋xūn 咳嗽sòu

C. 姗姗来迟shuān 珊珊可爱shān 栅栏zhà

D. 众口铄金shuò 闪烁shuò 瓦砾lì

C


解析:

shān 姗姗来迟

微信扫码获取答案解析
下载APP查看答案解析