做报价在哪个网站询价,免费个人简历模板电子版可填写,岳阳seo公司,石家庄seo扣费矩形拼接
题目分析
对于一个矩形而言#xff0c;我可以把它横着放#xff0c;而可以把它竖着放#xff0c;比如下图#xff0c; 3个矩形的拼接情况可以通过在纸上画图模拟出来#xff0c;情况有以下三种 图1
图3是4条边#xff0c;即四边形。观察一下什么时候会是四…矩形拼接
题目分析
对于一个矩形而言我可以把它横着放而可以把它竖着放比如下图 3个矩形的拼接情况可以通过在纸上画图模拟出来情况有以下三种 图1
图3是4条边即四边形。观察一下什么时候会是四边形假设先放下第一个矩形如果后放的第二个矩形和第三个矩形横着的边长加起来恰好等于第一个矩形的边长并且第二个矩形的竖着的边长和第三个矩形的竖着的边长恰好相等。 图2
图2有6条边即六边形。观察一下什么时候会是六边形假设先放下第一个矩形如果后放的第二个矩形和第三个矩形横着的边长加起来恰好等于第一个矩形的边长但是第二个矩形的竖着的边长和第三个矩形的竖着的边长不恰好相等。 图3
图1有8条边即八边形。观察一下什么时候会是八边形假设先放下第一个矩形如果后放的第二个矩形和第三个矩形横着的边长加起来不恰好等于第一个矩形的边长并且第二个矩形的竖着的边长和第三个矩形的竖着的边长不恰好相等。
//a[1][0]存的是第一个矩形的横向边长a[1][1]存的是第一个矩形的竖向边长
if(a[i][ii] a[j][jj] a[k][kk]){//这里i表示第1个矩形j表示第2个矩形k表示第3个矩形//iijjkk是矩形的横向边长 ans min(ans, 6);//如果第二个矩形和第三个矩形横着的边长加起来恰好等于第一个矩形的边长那么至少能够拼成一个六边形if(a[j][1-jj] a[k][1-kk])//此时如果第二个矩形的竖着的边长和第三个矩形的竖着的边长恰好相等那么可以拼成一个四边形ans min(ans, 4);
} 图4
//如果第二个矩形和第三个矩形横着的边长加起来不恰好等于第一个矩形的边长但是
if(a[i][ii] a[j][jj] || a[j][jj] a[k][kk])//如果第一个矩形和第二个矩形横着的边长相等或者第二个矩形横着的边长和第三个矩形横着的边长相等那么至少能够拼成一个六边形如上图ans min(ans, 6); 图5
if(a[i][ii] a[j][jj] a[j][jj] a[k][kk])//如果第一个矩形和第二个矩形横着的边长相等并且第二个矩形横着的边长和第三个矩形横着的边长相等那么可以拼成一个四边形ans min(ans, 4);下面的代码是依次遍历3个矩形每个矩形作为上图123中的第一个矩形或者第二个矩形或者第三个矩形考虑
//a[0][0]存的是第一个矩形的横向边长a[0][1]存的是第一个矩形的竖向边长
//a[1][0]存的是第一个矩形的横向边长a[1][1]存的是第一个矩形的竖向边长
//a[2][0]存的是第一个矩形的横向边长a[2][1]存的是第一个矩形的竖向边长
for(int i 0; i 2; i) //第1个矩形for(int j 0; j 3; j)if(i ! j) //第2个矩形for(int k 0; k 3; k)if(k ! i k ! j) //第3个矩形题目代码
#includebits/stdc.h
using namespace std;
int a[3][2];
int main(){int T; cin T;while(T--) {for(int i 0; i 3; i)cin a[i][0] a[i][1];int ans 8;for(int i 0; i 3; i) //第1个矩形for(int j 0; j 3; j)if(i ! j) //第2个矩形for(int k 0; k 3; k)if(k ! i k ! j) //第3个矩形for(int ii 0; ii 1; ii){ //第1个有横竖两种摆法for(int jj 0; jj 1; jj){ //第2个横竖摆for(int kk 0; kk 1; kk){ //第3个横竖摆if(a[i][ii] a[j][jj] a[k][kk]){ ans min(ans, 6);if(a[j][1-jj] a[k][1-kk])ans min(ans, 4);}if(a[i][ii] a[j][jj] || a[j][jj] a[k][kk])ans min(ans, 6);if(a[i][ii] a[j][jj] a[j][jj] a[k][kk])ans min(ans, 4);}}}coutansendl;}return 0;
}