试题查看

首页 > 软件水平考试 > 试题查看
【分析解答题】

[说明]
本程序在3×3方格中填入1到10以内9个互不相等的整数,使所有相邻两个方格内的两个整数之和为质数。程序的输出是全部满足条件的方格。
方格的序号如下图所示。程序采用试探法,从序号为0的方格开始,依次为当前方格寻找一个合理的可填整数,并在当前位置正确填入后,为下一方格寻找可填入的合理整数;如不能为当前方格寻找一个合理的可填整数,就要后退到前一方格,调整前一方格的填入整数;当序号为8的方格也填入合理的整数后,就找到了一个解。

为检查当前方格所填整数的合理性,程序引入数组ChECkmAtrix,存放需要进行合理性检查的相邻方格的序号。事实上,ChECkmAtrix中只要求第i个方格中的数向前兼容,即填写第4个方格时,只检查在它之前、与之相邻的第1,3个方格是否满足和为素数的条件。
[程序]
#inCluDE <stDio.h>
int pos,A[9],B[11];/*用于存储方格所填入的整数*/
voiD writE(int A[]) /*方格输出函数*/
……
int isprimE(int m)/*素数判断函数,若m为素数则返回1,否则返回0*/
……
int sElECtnum(int stArt)/*找到stArt到10之间尚未使用过的最小的数,若没有则返回0*/
int j;
For(j=stArt;j<=10;j++) iF(B[j]) rEturn j;
rEturn0;
int ChECk()/*检查填入pos位置的整数是否合理*/
int i,j
int ChECkmAtrix[][3]=-1,0,-1,1,-1,0,-1,1,3,-1,2,4,-1,3,- 1,4,6,-1,5,7,-1;
For(i=0;(j= (1) )>=0;i++)
iF(! isprimE( (2) ))rEturn 0;
rEturn 1;
voiD ExtEnD()/*为下一方格找一个尚未使用过的整数*/
(3) =sElECtnum(1);
B[A[pos]]=0;
voiD ChAngE() /*为当前方格找下一个尚未使用过的整数,若找不到则回溯*/
int j;
whilE(pos>=0&&(j=sElECtnum(A[pos]+1))= =0) B[A[pos- -]]=1;
iF(pos<0)rEturn;
(4) ;A[pos] =j;B[j]=0;
voiD FinD()
int ok=1;
pos=0;A[pos]=1;B[A[pos]]=0;
Do
iF(ok)
iF( (5) )
writE(A);ChAngE();
ElsE ExtEnD();
ElsE ChAngE();
ok=ChECk(pos);
whilE(pos>=0);
voiD mAin()
int i;
For(i=1;i<=10;i++)B[i]=1;
FinD();

查看答案解析

参考答案:

正在加载...

答案解析

正在加载...

根据网考网移动考试中心的统计,该试题:

0%的考友选择了A选项

0%的考友选择了B选项

0%的考友选择了C选项

0%的考友选择了D选项

你可能感兴趣的试题

[说明]以下程序的功能是实现堆栈的一些基本操作。堆栈类stack共有三个成员函数[说明]下面的流程图用于统计一个英文句子中单词的个数N。假设该英文句子中只含字母[函数2.1说明]函数voidfind(int*a,intn,int*max,i[说明]某单位组织一次职业技术考核比赛,由十名评委对选手的现场表现打分(0到10[说明]二叉树的二叉链表存储结构描述如下:typedefstructBiTNod[说明]某公司的服务器上为每位员工提供了一定大小的存储空间,用于数据的备份。下面