不朽功勋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 姗姗来迟