完善以下程序答案

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

二、根据题目要求,补充完善以下程序:(56 分)
分(每空5 分)
设有N 个不同整数的数列:例如N=4 时,有4 个不同整数的数列为17,4 ,16,5。

数列中的第1 个数17,比它后面的三个数都大,则称数17 的逆数为3。

数列中的第2 个数4 比它后面的数都小,则称数4 的逆数为0。

同时记数列中全部逆数的和称为数列的逆数。

上例中,数列17,4 ,16 ,5 的逆数:为3+0+1+0=4。

当给出N 个不同整数的数列后,求出此数列的逆数。

为求得上面问题的解,设置数组A:ARRAY[1..N] OF INTEGER 和逆数计
数器S,然后用一个二重循环求出数列的逆数。

#define N 4
main()
{ int i,j,s,a[N+1];
clrscr();
for(i=1;i<=N;i++)
scanf("%d",&a[i]);
s=0;
for(i=1; ____(1)_____ )
for(j=___(2)___ ; j<=N; j++)
if(a[i]>a[j]) ___(3)___ ;
printf(" s=%d",s);
return 0;
}
(1) i<=N; i++
(2) i+1
(3) s++
2 分(每空4 分)
装球:设有n 个盒子(n 足够大,可装入任何数量的球),分别编号1,2,……。

同时有k 个小球(k>0),今将k 个小球装入到盒子中去。

装入规则如下:
(1)第一个盒子不能为空。

(2)装入必须严格按递增顺序进行。

例如,当k=8,n=6 时,装入方法有1,2 ,5 或者1 ,3,4
(3)在满足上面的两个条件下,要求有球的盒子尽可能多。

(4)装完后,相邻盒子中球个数差的绝对值之和最小(未装的盒子不计)。

如上例中:
装入法1,2,5,则差的绝对值之和为2- 1+5-2=4
装入法1,3,4,则差的绝对值之和为3- 1+4-3=3
给出k (k 表示小球的个数)之后,求出满足上述四个条件的装入方法。

设计一个数组 A 用数组元素代表盒子,然后挨次装入小球。

#include <stdio.h>
#include <stdlib.h>
#define n 20
int i, j, k, l;
int a[21];
(2) j <= n && k >= j
(3) k = k –j
(4) a[l]++
(5) i <= j - 1
int main()
{
scanf(“ %d”, &k);
j = 1;
while( 2 )
{
a[j] = j;
3 ;
j++;
}
l = j –1;
while(k > 0)
{
4
k--;
l--;
}
for(i = 1; 5 ;i++)
{
printf(“ %d ”,a[i]);
}
return 0;
}
(2) j <= n && k > 0
(3) k = k –j
(4) a[l]++
(5) i <= j - 1
3 .分(3+4+3+3+4+4)
积木游戏:设有n 个小木块排成一排,如下图:
……
游戏开始时,每一个小木块向下的一面涂有红、黄、蓝三种颜色之中的一种(约定:0 表示红色,1 表示黄色,2 表示兰色)。

要求通过翻看与交换方式对小木块重新罗列(翻看的规则为每一个小木快只能看一次),最终成为下面的形状:
…… ……红蓝……黄
;
即相同颜色的木块罗列在一起, 设计一个翻看与交换的方案, 使得用至少的交换次数实 现上面的要求。

翻看小木块时,可以从两端进行。

例如,设中间状态如下:
…… A 红
…… 蓝
…… 黄
此时,可以从两个方向看,即从A 或者 B 处开始: (1)若看 A 则有三种可能性: 为红色,则不用交换
为兰色,交换一次,即 A 与 B 交换
为黄色,交换两次,即 C 与 B 交换一次,然后 A 与 C 再交换一次 此时,平均交换次数为 1。

(2)若看 B ,也有三种可能性: 为兰色,则不用交换
为红色,交换一次,即 B 与 A 交换。

为黄色,交换一次,即 B 与 C 交换。

此时,平均交换次数为 2/3。

由此可见,从 B 处翻看直到游戏结束,次数至少符合题目要求。

#include <stdio.h> #include <stdlib.h> #define n 20 int i, tem, r, b, y;
int a[21]; /* 0 或者 1 或者 2*/
int main() {
for(i = 1; i <= n; i++) scanf(“ %d ” , &a[i]); r = 1; 1 ; y = n; while( 2 ) {
if ( 3 ) {
tem = a[r]; a[r] = a[b]; a[b] = tem; r++;
}else if ( 4 ) {
tem = a[b]; a[b] = a[y]; a[y] = tem; 5 ; 6 ; }else b++; }
C B
未翻过
……
for(i = 1; i <= n; i++) printf(“%d”, a[i]);
return 0;
}
(1) b = n
(2) r <= b
(3) a[b] == 0
(4) a[b] == 1
(5) y--
(6) b--
下面程序的功能是从键盘读取A,B 数组的元素, A ,B 数组均已从小到大排好序(无
相同元素),现将A,B 合并为数组C,同样要求数组 C 也是从小到大排好序(有相同元素
时只保留一个)。

程序中N 表示数组A,B 的长度,i,j,k 分别表示数组A,B,C 的取数或者存数的指针。

#include <stdio.h>
#include <stdlib.h>
int n = 8, m = 16;
int a[9], b[9], c[9];
void copy(int *a, int *b, int i, int j){
i = i + 1;
y[i] = x[j];
j = j + 1;
}
int main(){
int i, j, k;
for (i = 1; i <= n; i++) scanf("%d", &a[i]);
for (i = 1; i <= n; i++) scanf("%d", &b[i]);
i = 1; j = 1; ___________①________
while(__________②_________)
{
if (a[i] < b[j]) copy(a, c, k, j);
else if (b[j] < a[i]) copy(b, c, k, j);
else{
copy(a, c, k, i);
__________③__________
}
}
while(__________④___________) copy(a, c, k, i);
while(__________⑤___________) copy(b, c, k, j);
for(i = 1; i <= k; i++) printf("%d ", c[i]);
return 0;
}
(1) k = 0
(2) i<=n && j <=n
(3) j++
(4) i<=n
(5) j<=n
四、根据题意,补充完善以下程序:(14%)
输入一长度不超过80 个字符的字符串 (称为源串),该字符串由小写英文字母、空格组成,并以'.'结束。

单词是由连续字母组成,两个单词之间至少有一个空格。

本程序的功能为:首先找出字符串中所有单词并保留一个空格作为单词分隔,存入数组ch 中。

然后用键盘输入一个待查找的单词,以字符'$'结束。

采用顺序查找的方法在ch 中进行查找,若找到,则输出该单词在ch 中浮现的序号(若有多个位置浮现该单词,则只输出第一个序号位置)。

若不存在,则输出'NOT FOUND'。

程序如下: (14%)
#include <stdio.h>
#include <stdlib.h>
char a[81], b[81], ch[81];
int i, j, k, n, m;
int main()
{
n = 0;
do{
_______ 1______;
scanf("%c", &a[n]);
}while(a[n] == '.');
getchar();
k = 0;
for (i = 1; i <= n; i++)
{
if (a[i] >= 'a' && a[i] <= 'z')
{
k = k + 1;
________2_________;
}else if(k != 0){
if (ch[k] <> ' '){
k = k + 1;
ch[k] = ' ';
}
}
}
m = 0; _________3________;
do{
m++; scanf("%c", &b[m]);
}while(_______4_________;);
while(i <= n && j <= m)
{
if (_________5________)
{
i = i + 1; j = j + 1;
}else{
while (ch[i] != ' ') { ____6____; }
i = i + 1; j = 1; k = k + 1;
}
}
if (_____7________) printf("%d ", k);
else printf("NOT FOUND");
return 0;
}
(1) n++
(2) ch[k] = a[i]
(3) n = k
(4) b[m] != ‘$ ’
(5) ch[i] == b[j]
(6) i++
(7) j > m - 1。

相关文档
最新文档