C++代码备忘:数组旋转

临时备忘

#include <iostream>

int main()
{
    const int rows = 3; // 行
    const int cols = 8; // 列

    // 假设原矩阵是通过一维数组表示 3 * 8
    int matrix[rows * cols] = {11,12,13,14,15,16,17,18,
                               21,22,23,24,25,26,27,28,
                               31,32,33,34,35,36,37,38};

    // 新矩阵的大小是 8 * 3
    const int brows=8;
    const int bcols=3;

    int new_matrix[brows * bcols] = {0};

    // 打印矩阵
    for (int i = 0; i < rows; i++) {
        for (int j = 0; j < cols; j++) {
            std::cout << matrix[i * cols + j] << " ";
        }
        std::cout << std::endl;
    }

    // 填充新矩阵
    for (int i = 0; i < rows; i++) {
        for (int j = 0; j < cols; j++) {
            new_matrix[j * rows + (rows - 1 - i)] = matrix[i * cols + j];
        }
    }
    
    // 打印新矩阵
    for (int i = 0; i < brows; i++) {
        for (int j = 0; j < bcols; j++) {
            std::cout << new_matrix[i * bcols + j] << " ";
        }
        std::cout << std::endl;
    }
    
    return 0;
}
以前上学的时候觉得所有的知识都挺容易理解的,现在也许是年龄大了,即便是对已经已经熟练掌握了的知识,再看的时候,都会感觉是“一头雾水”,唯有继续艰难的、一点点的重新理解,才能让自己感觉有所收获。

Related Posts

开发备忘

电路图中所有的网络是被netlistManager统一管理的,在netlistManager中有一个list用于存放netlistNode,当电路图中有多少网络节点,就相当于有多少个netlistNode被存放进list中。 注:上面只是临时写的“list”,至于具体使用的容器应该是list还是vector,还有待进一步推敲。(2024.12.24) 每一个netlistNode相当于是一个网络节点,其内部又有一个list,用于记录着连接到了这一网络节点上的所有“引脚”,也就是接入到这一网络节点上的所有freePin,icPin,线段等等。 当需要生成矩阵(A)和向量(b)时,生成工作由netlistManager进行,它首先根据自身拥有的netlistNode数量决定矩阵和向量的大小,然后开辟内存空间:例如有8个netlistNode、也就是有8个网络节点,那么netlistManager将会创建一个8×8的矩阵A、长度为8的向量b、长度为8的向量solution、长度为8的……若干用到的params。 注:上面这里后面提及的若干个向量,感觉应该封装一下,以更方便使用;2024.12.24 注:上面提到的netlistManager创建的矩阵A,现在总是隐约感觉应该用指针,每一行具体的内容应该由各个netlistNode内部持有;2024.12.24 但是这里不能直接使用遍历netlistNode、不能借助for(key=>value)中的key作为行列依据。原因后面会说明。先说一下需要的做法:在准备生成矩阵和向量之前,要先对当前所有的netlistNode进行一次“编号分配”,这个编号分配出来的并不是netlistNode部分的“名称编号”,而是一个矩阵操作编号。 有了这个矩阵操作编号之后,每一个netlistNode内部的createMatrix()方法,便可以根据自己刚刚被赋予的矩阵操作编号,知道自己计算出来的系数放在矩阵的哪一行、或者哪一列中。 当netlistNode含有一个孤立IC时,自己的分配编号就对应到了行、列上。 当netlistNode含有电源或IC时,无论是基于电源的电压方程、还是基于IC的KCL方程,都可以生成出一个方程,这个方程的系数就是矩阵的行系数。 因为行是netlistNode自己已经知道的(分配编号),所以系数放在哪一行是明确的。 但是这个系数方程是通过各个电源或IC桥接其他网络计算出来的,而其他网络计算出来的结果就是系数中的列属性,这个时候就要知道所有的“桥”的另外一侧的网络是哪个列上的,因而回到最初的问题:要在createMatrix之前,先为所有的网络分配编号。

使用SageMath对线性方程组求解备忘

如下图所示,完成对线性方程组求解: 与上述线性方程组相呼应的电路结构如下所示: 这里实际上,按道理是不应该能够解出上面的线性方程组的,原因是其中的矩阵是一个奇异矩阵。但是SageMath依然能够完成这个线性方程组的求解,是什么原因呢?也许是SageMath在面对这样的问题时,会给出一个特解来么?