北航机试--矩阵替换(C语言实现)
北航11年机试
【问题描述】
依次输入两个矩阵A和B,并指定替换起始位置于左上角的位置坐标;随后生成与B大小相同的子矩阵,并将其赋值给矩阵A中的相应区域;最后并输出处理后的结果矩阵。
【输入形式】
从控制台接收用户对矩阵的操作指令,请先设置操作参数:获取并存储矩阵A的行与列的数量(均为介于1到20之间的整数值)。随后在同一界面中读取并存储每行完整的数据集合——这些数据应以空格分隔开的形式呈现。重复上述操作流程来获取并存储完整的矩阵B数据集。最后请求用户指定要将元素替换的位置——具体要求是在一行一列的位置上进行操作(其中行列索引均从1开始计起)。如果所指定的操作位置超出当前可用范围,则系统将直接输出原始未修改前的状态。
【输出形式】
请在标准输出界面中按行显示替换后的矩阵,并确保每行中的数值用空格分隔开
【输入样例1】
5 6
10 2 34 -1 800 90
2 76 56 -200 23 1
35 0 0 98 8 3000
2000 100 -1 1 2 0
8 7 85 963 496 8
2 3
9 9 9
9 9 9
3 3
【输出样例1】
10 2 34 -1 800 90
2 76 56 -200 23 1
35 0 9 9 9 3000
2000 100 9 9 9 0
8 7 85 963 496 8
【样例1说明】
输入是一个5×6维的空间数据阵列A,在其内部构造一个由2×3个元素构成的空间数据阵列B,并规定该子阵列的位置设置在空间数据阵列A中的第三行第三列位置处。具体操作步骤如下:首先从空间数据阵列A中的第三行第三列位置开始提取一个与空间数据阵列B具有相同维度大小的小区域(即从该起始位置延伸并包含两个完整的行列),然后将该小区域内的所有元素值全部替换成来自空间数据阵列表中的对应元素值。
【输入样例2】
3 4
10 2 34 -1
2 76 56 -200
35 0 0 98
2 3
9 9 9
9 9 9
2 3
【输出样例2】
10 2 34 -1
2 76 9 9
35 0 9 9
【样例2说明】
输入的矩阵A具有行数为3、列数为4的特点;而目标替换对象是一个维度大小设定为2×3的标准矩阵B;具体操作中需将该操作限定在将位于原矩阵A中的第2行第3列位置处作为起始点;随后提取一个与目标替换对象尺寸一致的新子区域并完成替代表操作;但由于该子区域超出原数据存储空间范围而导致仅部分完成替代表操作
#include <stdio.h>
int main(){
int i,j;
int r,c;
int sr,sc;
int x,y;
int init[20][20]={0};
int s[20][20]={0};
freopen("4.txt","r",stdin);//为简化输入,将输入重定向,直接读取记事本中的内容
scanf("%d%d",&r,&c);
for(i=0;i<r;i++){
for(j=0;j<c;j++)
scanf("%d",&init[i][j]);
}
scanf("%d%d",&sr,&sc);
for(i=0;i<sr;i++){
for(j=0;j<sc;j++)
scanf("%d",&s[i][j]);
}
scanf("%d%d",&x,&y);
for(i=0;i<sr;i++){ //进行数组内容替换
for(j=0;j<sc;j++)
if(i+x-1<r&&j+y-1<c)
init[i+x-1][j+y-1]=s[i][j];
}
for(i=0;i<r;i++){
for(j=0;j<c;j++)
printf("%d ",init[i][j]);
printf("\n");
}
return 0;
}
