解题思路:主要是在大矩形当中找小矩形,最关键的一个地方就是找到小矩形左上角的元素,然后进行for循环展开就可以了,但是这边要注意的是在进行寻找左上角元素的时候,他的最终位置一定要注意.
注意事项:min我这边是使用了一个define,玩家可以自行定义,int的最大值即可.
参考代码:
#include<stdio.h>
#include<stdlib.h>
#define MAX_INT ~((unsigned int)0)>>1;//输出int型可以表示的最大值
int main()
{
/*
输入函数,注意是二维数组,也就是行列
*/
int m,n,i,j,r,s;
int a[101][101],b[101][101];
scanf("%d %d\n",&m,&n);
for(i=0;i<m;i++)
{
for(j=0;j<n;j++)
{
scanf("%d ",&a[i][j]);
}
scanf("\n");
}
scanf("%d %d\n",&r,&s);
for(i=0;i<r;i++)
{
for(j=0;j<s;j++)
{
scanf("%d ",&b[i][j]);
}
scanf("\n");
}
int drow,dcol,min;
min =MAX_INT;
for(i=0;i<m-r+1;i++)//注意行列和矩形
{
for(j=0;j<n-s+1;j++)//上面两个for选定了一个值(左上角元素),然后从该值出发进行选择矩形
{
int k,l,sum=0;
for(k=0;k<r;k++)//执行要选择出来的矩形
{
for(l=0;l<s;l++)
sum=sum+abs(abs(a[i+k][j+l]-b[k][l]));
}
if(sum<min)//要取最小的,行列
{
drow=i;dcol=j;min=sum;//drow和dcol是在大矩形当中的起始值
}
}
}
for (i = 0; i < r; i++) {
for (j = 0; j < s; j++)
printf("%d ", a[drow + i][dcol + j]);
printf("\n");
}
return 0;
}
0.0分
4 人评分
母牛的故事 (C语言代码)浏览:1451 |
C语言程序设计教程(第三版)课后习题10.2 (C语言代码)浏览:1483 |
蚂蚁感冒 (C语言代码)浏览:816 |
简单的a+b (C语言代码)浏览:542 |
C语言程序设计教程(第三版)课后习题8.1 (C语言代码)浏览:606 |
简单的a+b (C语言代码)浏览:617 |
母牛的故事 (C语言代码)浏览:495 |
孤独的骑士 (C语言代码)浏览:1416 |
C语言程序设计教程(第三版)课后习题4.9 (Java代码)浏览:629 |
C语言程序设计教程(第三版)课后习题6.4 (C语言代码)浏览:479 |