问题 F: 例题5-6 矩阵输出

本文介绍了一种使用双层循环实现4*5矩阵的输出方法,每行包含5个数字,每个数字占据3个字符宽度并右对齐。通过调整循环变量,实现了矩阵的动态生成和格式化输出。

题目描述

输出以下4*5的矩阵

1 2 3 4 5

2 4 6 8 10

3 6 9 12 15

4 8 12 16 20

要求使用循环实现,注意每行输出5个数字,每个数字占3个字符的宽度,右对齐。

输入

输出
每行输出5个数字,每个数字占3个字符的宽度,右对齐。

样例输入

样例输出

1 2 3 4 5
2 4 6 8 10
3 6 9 12 15
4 8 12 16 20

#include<stdio.h>
int main()
{
    int t=1;
    int n=0;
    for(int i=1;i<=4;i++)
    {
        n=n+1;
        for(int j=1;j<=5;j++)
        {
            t=j*n;
            printf("%3d",t);
            if(j%5==0)
            {
                printf("\n");
                t=1;
            }
        }
    }
    return 0;
}
请把如下內容,转成markdown语法 一、常系数齐次线性递推 1. 基本定义 对于数列 {f},若满足递推关系: math f_i = a_1 f_{i-1} + a_2 f_{i-2} + \cdots + a_k f_{i-k} 则称该数列满足 k阶常系数齐次线性递推。 常系数:系数a₁,a₂,...,aₖ为常数 齐次:等式右边无常数项(如无"+c") 2. 经典示例:斐波那契数列 math f_i = f_{i-1} + f_{i-2} \quad (k=2) 初始条件通常为 f₁=1, f₂=1。 二、矩阵加速原理 1. 核心思想 将递推式转化为矩阵幂运算,利用快速幂算法将时间复杂度从 O(n) 优化到 O(k³ logn)。 2. 构造转移矩阵 以斐波那契数列为例: 将递推关系改写为矩阵形式: math \begin{bmatrix} f_i \\ f_{i-1} \end{bmatrix} = \begin{bmatrix} 1 & 1 \\ 1 & 0 \end{bmatrix} \times \begin{bmatrix} f_{i-1} \\ f_{i-2} \end{bmatrix} 转移矩阵A的确定: 通过方程对比得到: math \begin{cases} f_i = 1 \cdot f_{i-1} + 1 \cdot f_{i-2} \\ f_{i-1} = 1 \cdot f_{i-1} + 0 \cdot f_{i-2} \end{cases} 因此: math A = \begin{bmatrix} 1 & 1 \\ 1 & 0 \end{bmatrix} 3. 幂次展开 通过递推可得: math \begin{bmatrix} f_n \\ f_{n-1} \end{bmatrix} = A^{n-2} \times \begin{bmatrix} f_2 \\ f_1 \end{bmatrix} 计算Aⁿ⁻²时使用矩阵快速幂(时间复杂度O(log n))。 三、扩展场景 1. 含常数项的递推 例如:f_i = a f_{i-1} + b f_{i-2} + c 解法:增加维度存储常数c 转移矩阵: math \begin{bmatrix} f_i \\ f_{i-1} \\ c \end{bmatrix} = \begin{bmatrix} a & b & 1 \\ 1 & 0 & 0 \\ 0 & 0 & 1 \end{bmatrix} \times \begin{bmatrix} f_{i-1} \\ f_{i-2} \\ c \end{bmatrix} 2. 含多项式项的递推 例如:f_i = a f_{i-1} + b f_{i-3} + i² 解法:需额外存储i²和i的递推关系 转移矩阵(需5维): math \begin{bmatrix} f_i \\ f_{i-1} \\ f_{i-2} \\ i^2 \\ i \end{bmatrix} = \begin{bmatrix} a & 0 & b & 1 & 0 \\ 1 & 0 & 0 & 0 & 0 \\ 0 & 1 & 0 & 0 & 0 \\ 0 & 0 & 0 & 1 & 2 \\ 0 & 0 & 0 & 0 & 1 \end{bmatrix} \times \begin{bmatrix} f_{i-1} \\ f_{i-2} \\ f_{i-3} \\ (i-1)^2 \\ i-1 \end{bmatrix} 四、例题解析(P1939) 问题描述 递推式:f_i = f_{i-1} + f_{i-3},初始值f₁=f₂=f₃=1,fₙ mod 1e9+7。 矩阵构造 确定状态向量: math \begin{bmatrix} f_i \\ f_{i-1} \\ f_{i-2} \end{bmatrix} 根据递推关系建立方程: math \begin{cases} f_i = 1 \cdot f_{i-1} + 0 \cdot f_{i-2} + 1 \cdot f_{i-3} \\ f_{i-1} = 1 \cdot f_{i-1} + 0 \cdot f_{i-2} + 0 \cdot f_{i-3} \\ f_{i-2} = 0 \cdot f_{i-1} + 1 \cdot f_{i-2} + 0 \cdot f_{i-3} \end{cases} 得到转移矩阵: math A = \begin{bmatrix} 1 & 0 & 1 \\ 1 & 0 & 0 \\ 0 & 1 & 0 \end{bmatrix} 快速幂计算 最终解: math \begin{bmatrix} f_n \\ f_{n-1} \\ f_{n-2} \end{bmatrix} = A^{n-3} \times \begin{bmatrix} f_3 \\ f_2 \\ f_1 \end{bmatrix} 五、关键点总结 维度确定:状态向量需包含所有参与递推的项(包括常数、多项式等) 矩阵构造:通过展开递推式的系数确定转移矩阵 边界处理:初始向量对应最小的下标值 复杂度:矩阵快速幂的复杂度为O(k³ logn),其中k为矩阵维度 通过这种将线性递推转化为矩阵幂运算的方法,可以高效解决大规模递推问题,尤其适用于n极大(如1e18)的场景。
最新发布
08-20
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值