【正确答案】(1)本小题是计算数组A的最外围的4条边的所有元素之和,先分别求出各边的元素之和,累加后减去4个角的重复相加的元素即为所求。
(2)本小题的互不相邻是指上、下、左、右、对角线均不相邻,即求第0,2,4,…的各行中第0,2,3,…列的所有元素之和,函数中用i和j变量控制即可。
(3)本小题中一条对角线是A[i][i](0≤i≤m-1),另一条对角线是A[m-i-1][i](0≤i≤m-1),采用循环实现。
实现代码如下:
void proc1(int A[m][n]) //实现(1)小题功能的函数
{
int s=0,i,j;
for(i=0;i<m;++i) //第一列
s=s+A[i][0];
for(i=0;i<m;++i) //最后一列
s=s+A[i][n-1];
for(j=0;j<n;++j) //第一行
s=s+A[0][j];
for(j=0;j<m;+j+) //最后一行
s=s+A[m-1][j];
s=s-A[0][0]-A[0][n-1]-A[m-1][0]-A[m-1][n-1];
//减去4个角的重复元素值
cout<<"结果1: "<<s<<endl;
}
void proc2(int A[m][n]) //实现(2)小题功能的函数
{
int s=0,i=0,j;
do
{
j=0;
do
{
s=s+A[i][j];
j=j+2;//跳过一列
}while(j<n);
i=i+2;//跳过一行
}while(i<m);
cout<<"结果2: "<<s<<endl;
}
void proc3(int A[m][n]) //实现(3)小题功能的函数
{
int i,s;
if(m!=n)
cout<<"m≠n"<<endl;
else
{
s=0;
for(i=0;i<m;++i)
s=s+A[i][i]; //求第一条对角线之和
for(i=0;i<n;++i)
s=s+A[n-i-1][i]; //累加第二条对角线之和
cout<<"结果3: "<<s<<endl;
}
}
【答案解析】