上机练习第48天

第一题

个人总结:An的构造:采用递归方式,从1开始到n,每层根据当前层数i的奇偶决定符号(奇数用+,偶数用-),最后返回时加上右括号,形成嵌套的sin表达式。Sn的构造:先打印n-1个左括号,然后从i=1到n循环,每次先输出当前的Ai表达式,再加上数字n-i+1,并在除最后一次外的每次循环后加右括号,形成多层嵌套的最终表达式。

代码如下:

复制代码
#include <stdio.h>

void printAn(int n, int i) {
    if (i == n) {
        printf("sin(%d)", i);
        return;
    }
    printf("sin(%d%c", i, (i % 2 == 1) ? '+' : '-');
    printAn(n, i + 1);
    printf(")");
}

void printSn(int n) {
    int i;
    for (i = 1; i < n; i++) {
        printf("(");
    }
    for (i = 1; i <= n; i++) {
        printAn(i, 1);
        printf("+%d", n - i + 1);
        if (i < n) {
            printf(")");
        }
    }
}

int main() {
    int N;
    scanf("%d", &N);
    printSn(N);
    printf("\n");
    return 0;
}

第二题

个人总结:每个矩形给定的是任意一对相对顶点,需要先转换为左下角(min_x, min_y)和右上角(max_x, max_y)的形式。求相交矩形:相交矩形的左边界 = 两个矩形左边界最大值;相交矩形的右边界 = 两个矩形右边界最小值;相交矩形的下边界 = 两个矩形下边界最大值; 相交矩形的上边界 = 两个矩形上边界最小值。如果左边界 < 右边界 且 下边界 < 上边界,则两矩形相交,面积为(右边界-左边界) * (上边界-下边界);否则面积为0。最后输出。

代码如下:

复制代码
#include <stdio.h>
double max(double a, double b) {
    return a > b ? a : b;
}
double min(double a, double b) {
    return a < b ? a : b;
}
int main() {
    double x1, y1, x2, y2;  
    double x3, y3, x4, y4; 
    scanf("%lf %lf %lf %lf", &x1, &y1, &x2, &y2);
    scanf("%lf %lf %lf %lf", &x3, &y3, &x4, &y4);
    double rect1_x1 = min(x1, x2);
    double rect1_y1 = min(y1, y2);
    double rect1_x2 = max(x1, x2);
    double rect1_y2 = max(y1, y2);
    double rect2_x1 = min(x3, x4);
    double rect2_y1 = min(y3, y4);
    double rect2_x2 = max(x3, x4);
    double rect2_y2 = max(y3, y4);
    double inter_x1 = max(rect1_x1, rect2_x1);
    double inter_y1 = max(rect1_y1, rect2_y1);
    double inter_x2 = min(rect1_x2, rect2_x2);
    double inter_y2 = min(rect1_y2, rect2_y2);
    double area = 0;
    if (inter_x1 < inter_x2 && inter_y1 < inter_y2) {
        area = (inter_x2 - inter_x1) * (inter_y2 - inter_y1);
    }
    printf("%.2f\n", area);
    return 0;
}

第三题

个人总结:特殊情况处理:当M=0时,任何矩阵的0次幂都是单位矩阵(主对角线为1,其余为0);结果矩阵C的第i行第j列元素等于A的第i行与B的第j列对应元素乘积之和。即Cij = sum(Aik * Bkj)。循环计算:初始化结果矩阵为原矩阵A;进行M-1次乘法运算(因为第1次已经是A^1);每次乘法使用临时矩阵存储中间结果,避免计算过程中数据被覆盖。

代码如下:

复制代码
#include <stdio.h>
int main() {
    int N, M;
    int A[30][30], result[30][30], temp[30][30];
    scanf("%d %d", &N, &M);
    for (int i = 0; i < N; i++) {
        for (int j = 0; j < N; j++) {
            scanf("%d", &A[i][j]);
        }
    }
    if (M == 0) {
        for (int i = 0; i < N; i++) {
            for (int j = 0; j < N; j++) {
                if (i == j) {
                    result[i][j] = 1;
                } else {
                    result[i][j] = 0;
                }
            }
        }
    } else {
        for (int i = 0; i < N; i++) {
            for (int j = 0; j < N; j++) {
                result[i][j] = A[i][j];
            }
        }
        for (int k = 1; k < M; k++) {
            for (int i = 0; i < N; i++) {
                for (int j = 0; j < N; j++) {
                    temp[i][j] = 0;
                    for (int t = 0; t < N; t++) {
                        temp[i][j] += result[i][t] * A[t][j];
                    }
                }
            }
            for (int i = 0; i < N; i++) {
                for (int j = 0; j < N; j++) {
                    result[i][j] = temp[i][j];
                }
            }
        }
    }
    for (int i = 0; i < N; i++) {
        for (int j = 0; j < N; j++) {
            printf("%d", result[i][j]);
            if (j < N - 1) {
                printf(" ");
            }
        }
        printf("\n");
    }
    return 0;
}

翻译

但有一个问题依然存在:你如何编写一条指令,让它第一次指向数组的第一个元素,而下一次又指向另一个元素?其实非常简单:你只需借鉴你一直在使用的下标概念。不过,你不再使用下标,而是将下标值放在方括号中。使用这种表示法,你将 number₀ 表示为 number0。

按照惯例,number₁ 变为 number1,number₁₉ 变为 number19。这被称为索引。使用典型的引用方式,你现在就可以通过变量来引用数组了。使用数组和循环处理这20个数字的流程图如图3C-4所示。

在接下来的部分,我们将研究一个数组应用:频率数组及其图形表示。

频率数组显示在一系列数字中具有相同值的元素的数量。例如,假设你从0到19之间的100个值中抽取了一个样本。你想知道其中有多少个值是0,多少个是1,多少个是2,依此类推,直到19。

单词打卡

相关推荐
闻缺陷则喜何志丹4 分钟前
详细设计说明书的内容要求
算法·测试·存储
Logic1019 分钟前
C语言/数据结构位运算题解:异或XOR找出糖葫芦派对中的“独一无二山楂果数量“——只出现一次的数字
c语言·数据结构·数组·位运算·时间复杂度·算法题·异或性质
和裕9 分钟前
定制纸箱刀卡、平卡、隔档分别是什么?结构与适用场景区别全解析
大数据·运维·网络·人工智能·算法
Tisfy32 分钟前
LeetCode 3723.数位平方和的最大值:构造
数学·算法·leetcode·字符串·题解
hetao173383737 分钟前
联盟场-提高组-R4 & ZYZSC-S-Round 7
c++·算法
碧海银沙音频科技研究院1 小时前
基于炬芯ATS3089X音箱的音乐播放歌词显示功能实现
人工智能·驱动开发·嵌入式硬件·算法
知识分享小能手1 小时前
C学习教程,从入门到精通,C语言数组 —— 知识点详解(8)
c语言·学习·算法
hetao17338371 小时前
联盟场-提高组-R2 & ZYZSC-S-Round 5
c++·算法
其实防守也摸鱼1 小时前
Codex 下载与本地部署实战指南
linux·服务器·前端·数据库·算法·ai
南极企鹅1 小时前
生产环境gc文件分析
java·jvm·算法