已知3个矩形的大小依次是axb,a2xb2和agxb3。用这3个矩形能拼出的所有多边形中,边数最少可以是多少?
#include <iostream>
using namespace std;
int main()
{
cout << "请输入数据的组数:" << endl;
int n, a[100],m=0;
cin >> n;
for (int i = 0; i < n; i++) //几组数据
{
cout << "请输入第" << i + 1 << "组数据:" << endl;
for (int j = i*6; j < 6*(i+1); j++) //每组数据多少
{
cin >> a[j];
}
}
for (int i = 0; i < n; i++) //一组数据作比较
{
for (int j = i * 6; j < 6 * (i + 1); j++) // 一对一对应,
{
for (int k = j; k < 6 * (i + 1)-1; k++)
{
if (a[j] == a[k + 1])
{
m++;
}
}
}
cout << 8 - (m * 2) << endl;
m = 0;
}
}
根据题意,在画图软件将三个矩形拼接,基本上有以下三种情况,如图
#include <stdio.h>
/*
*https://img-mid.csdnimg.cn/release/static/image/mid/ask/009510645066116.png "#left")
功能:计算两个矩形是否有一条边长相等,且其他两个边相加等于另一个矩形的边长
* 返回值:1 表示计算结果符合条件,0表示不符合
* 参数:
* rectLengthA、rectWidthA:第一个矩形的长、宽
* rectLengthB、rectWidthB:第二个矩形的长、宽
* OtherLength:另一个矩形边长
*/
int rectangleCalc(int rectLengthA, int rectWidthA, int rectLengthB, int rectWidthB, int OtherLength)
{
if((rectLengthA==rectLengthB && (rectWidthA+rectWidthB) == OtherLength)||\
(rectLengthA==rectWidthB && (rectWidthA+rectLengthB) == OtherLength)||\
(rectWidthA==rectLengthB && (rectLengthA+rectWidthB) == OtherLength)||\
(rectWidthA==rectWidthB && (rectLengthA+rectLengthB) == OtherLength))
{
return 1;
}
return 0;
}
int main()
{
int arr_num = 0;
int array[100][6];
// 1、获取数组个数
scanf("%d",&arr_num);
if(arr_num>100)
printf("数组组数最多输入100,你输入值为 %d\n",arr_num);
// 2、获取矩形边长
int i = 0;
for(i=0; i<arr_num; i++)
{
scanf("%d %d %d %d %d %d",&array[i][0],&array[i][1], &array[i][2], &array[i][3], &array[i][4], &array[i][5]);
}
printf("\n输出如下:\n");
// 3、分情况输出
for(i=0; i<arr_num; i++)
{
// 第一个情况,三个矩形边长都不相等:
// 比较A1与A2、B2、A3、B3是否不相等,B1与A2、B2、A3、B3是否不相等,A2与A3、B3是否不相等,B2与A3、B3是否不相等,
if(array[i][0] != array[i][2] && array[i][0] != array[i][3] && array[i][0] != array[i][4] && array[i][0] != array[i][5] &&
array[i][1] != array[i][2] && array[i][1] != array[i][3] && array[i][1] != array[i][4] && array[i][1] != array[i][5] &&\
array[i][2] != array[i][4] && array[i][2] != array[i][5] &&\
array[i][3] != array[i][5] && array[i][3] != array[i][5])
{
printf("8\n");
}
// 第三个情况之一,两个矩形同一条边相等且另外两个边相加等于另一个矩形的一边
else if(rectangleCalc(array[i][0], array[i][1], array[i][2],array[i][3], array[i][4]) ||\
rectangleCalc(array[i][0], array[i][1], array[i][2],array[i][3], array[i][5]) ||\
rectangleCalc(array[i][0], array[i][1], array[i][4],array[i][5], array[i][2]) ||\
rectangleCalc(array[i][0], array[i][1], array[i][4],array[i][5], array[i][3]) ||\
rectangleCalc(array[i][4], array[i][5], array[i][2],array[i][3], array[i][0]) ||\
rectangleCalc(array[i][4], array[i][5], array[i][2],array[i][3], array[i][1]))
{
printf("4\n");
}
// 第三个情况之二,三个矩形,都有一条边相等
// (A1、A2、A3相等) 或 (A1、B2、A3相等) 或 (B1、A2、A3相等) 或 (B1、B2、A3相等)
// (A1、A2、B3相等) 或 (A1、B2、B3相等) 或 (B1、A2、B3相等) 或 (B1、B2、B3相等)
else if((array[i][0]==array[i][2] && array[i][2]==array[i][4])||\
(array[i][0]==array[i][3] && array[i][3]==array[i][4])||\
(array[i][1]==array[i][2] && array[i][2]==array[i][4])||\
(array[i][1]==array[i][3] && array[i][3]==array[i][4])||\
(array[i][0]==array[i][2] && array[i][2]==array[i][5])||\
(array[i][0]==array[i][3] && array[i][3]==array[i][5])||\
(array[i][1]==array[i][2] && array[i][2]==array[i][5])||\
(array[i][1]==array[i][3] && array[i][3]==array[i][5]))
{
printf("4\n");
}
else //剩下的都是第二个情况,6个边
{
printf("6\n");
}
}
return 0;
}
将上面代码复制到为 a.c, 我这里是linux系统,编译通过,输出结果如下: