想知道这个的用C语言怎么写

已知3个矩形的大小依次是axb,a2xb2和agxb3。用这3个矩形能拼出的所有多边形中,边数最少可以是多少?

img


#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;
    }
    
}

根据题意,在画图软件将三个矩形拼接,基本上有以下三种情况,如图

img


图中列举出不同情况下的最少边数的拼接,可能存在其他拼接方式,但不是最少边数的,
接下来根据要求,用C语言编写代码,如下:

#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++)
    {
        // 第一个情况,三个矩形边长都不相等:
        // 比较A1A2B2A3B3是否不相等,B1A2B2A3B3是否不相等,A2A3B3是否不相等,B2A3B3是否不相等,
        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");
        }
        
        // 第三个情况之二,三个矩形,都有一条边相等
        // (A1A2A3相等) 或 (A1B2A3相等) 或 (B1A2A3相等) 或 (B1B2A3相等) 
        // (A1A2B3相等) 或 (A1B2B3相等) 或 (B1A2B3相等) 或 (B1B2B3相等) 
        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系统,编译通过,输出结果如下:

img