解决数学图形旋转总面积

正方形顺时针逆时针旋转45度行和列交点的总面积
第二行的0是逆时针旋转,如果是1是顺时针旋转
题目如下:

img

img

思路:

img


我写的代码:只写了一点

#include<stdio.h>

int main()
{
    int T,n,d,i,x,y,c,k,s;
    scanf("%d",&T);
    for(i=1;i<=T;i++){
    scanf("%d%d",&n,&d);
    for(i=1;i<=n;i++){
    scanf("%d",&x);
    }
    for(i=n;i<=1;i++){
    scanf("%d",&y);
    }
    if(d==0){
    s=x*y;
    
    }
    }
    return 0;
}


#include<iostream>
#include<vector>
#include<algorithm>
#include<cstdint>
using namespace std;
#define numtype_t uint64_t
void fakeMul(const vector<numtype_t>& lhs, const vector<numtype_t>& rhs, vector<numtype_t>& out)
{
    out.resize(lhs.size() + rhs.size() - 1);
    fill(out.begin(), out.end(), 0);
    for (int i = 0; i < rhs.size(); ++i)
    {
        int k = i;
        for (int j = 0; j < lhs.size(); ++j)
        {
            numtype_t mul = rhs[i] * lhs[j];
            out[k++] += mul;
        }
    }
}

void printNum(const vector<numtype_t>& num)
{
    for (int i = 0; i < num.size(); ++i)
    {
        cout << num[i];
        if (i != num.size() - 1)cout << " ";
        else cout << endl;
    }
}

int main()
{
    int numTests;
    cin >> numTests;
    while (numTests--)
    {
        int n, d;
        cin >> n >> d;
        vector<numtype_t> num0(n), num1(n);
        for (int i = 0; i < n; ++i)
            cin >> num0[i];
        for (int i = 0; i < n; ++i)
            cin >> num1[i];
        vector<numtype_t> rowResult, colResult;
        if (!d)
        {
            fakeMul(num0, num1, rowResult);
            reverse(num1.begin(), num1.end());
            fakeMul(num0, num1, colResult);
        }
        else
        {
            fakeMul(num0, num1, colResult);
            reverse(num1.begin(), num1.end());
            fakeMul(num0, num1, rowResult);
        }
        printNum(rowResult);
        printNum(colResult);
    }
    return 0;
}

给你写了百分之80了,思路也有了,剩下的自己完成下吧,代码:

#include<stdio.h>

//最大长度
#define N 100

int main()
{
    //矩阵
    int square[N][N];

    //标志位
    int falg = 0;
    scanf("%d", &falg);

    //长度
    int endx = 0;
    scanf("%d", &endx);
    int startx = 0;
    scanf("%d", &startx);

    int len = endx - startx;

    //x和y
    int x[N],y[N];
    int i,j;
    for (i = 0; i < len; i++)
    {
        scanf("%d", &x[i]);
    }
    for (i = len-1; i >= 0; i--)
    {
        scanf("%d", &y[i]);
    }


    for (i = 0; i < len; i++)
    {
        for (j = 0; j < len; j++) {
            square[i][j] = x[i] * y[j];
        }

    }

    for (i = 0; i < len; i++)
    {
        for (int j = 0; j < len; j++) {
            //测试
            printf("%d", square[i][j]);
        }
        printf("\n");
    }


    if (falg == 1) {
        //输出斜对角
        //自己找找规矩写写吧,想不出来了
    }

    if (falg == 0)
    {

    }

    return 0;
}

效果:

img