算法:矩阵右移

#include <iostream>
#include <iomanip>
using namespace std;
//数组右移m位,左边补0;
//如:1 2 3
//    4 5 6
//    7 8 9
//右移动2位的结果是:
//    0 0 1
//    0 0 4
//    0 0 7
void Grial(int(*a)[4], int n,int m)
{

    for (int i = n - 1; i >= m; i--)
    {
    //赋值and清零。
        for (int j = 0; j < n; j++)
        {
            a[j][i] = a[j][i-m];
            a[j][i - m] = 0;
        }
    //看到一个代码很复杂,自己来写的试试。2行主要的。
    }
}
int main()
{
    int a[][4] = {1,2,3,4,
               5,6,7,8,
               9,10,11,12,
               13,14,15,16};
    Grial(a, 4,2);

    for (int i = 0; i < 4; i++)
    {
        for (int j = 0; j < 4; j++)
        {
            cout << setw(5)<<a[i][j];
        }
        cout << endl;
    }

    return 0;
}

版权声明:本文为博主原创文章,未经博主允许不得转载。

时间: 2024-08-06 10:43:22

算法:矩阵右移的相关文章

BZOJ 1009 HNOI2008 GT考试 KMP算法+矩阵乘法

题目大意:给定长度为m的数字串s,求不包含子串s的长度为n的数字串的数量 n<=10^9 光看这个O(n)就是挂 我们不考虑这个 令f[i][j]为长度为i的数字串中最后j位与s中的前j位匹配的方案数 比如当s为12312时 f[i][3]表示长度为i,以123结尾且不包含子串"12312"的方案数 a[x][y]为f[i-1][x]转移至f[i][y]的方案数 换句话说(可能描述不清楚) a[x][y]为s的长度为x的前缀加上一个数字后 后缀可以与最长长度为y的前缀匹配 这个数

strassen算法——矩阵乘法

strassen算法可以看做是分治递归法求解矩阵乘法的改进. 利用分治递归法求解矩阵乘法的过程大致: 矩阵C = A * B(A.B.C都是n x n矩阵) 可以发现(A11 * B11).(A12 * B21)--等子矩阵的乘法运算需要继续递归.上面有8个乘法,所以需要递归8次. 时间复杂度关系公式 T(n) = 8T(n/2) + O(n^2),这里8T(n/2)是8次递归,O(n^2)是求C11,C12,C21,C22所做的加法,因为(A11*B11).(A12*B21)--都有n^2 /

UOJ#75. 【UR #6】智商锁 随机化算法 矩阵树定理

原文链接www.cnblogs.com/zhouzhendong/p/UOJ75.html 前言 根本没想到. 题解 首先我们可以考虑一种做法: 找一些图,使得他们各自的生成树个数乘起来等于 k. 那么只要将他们用一条链连起来就得到答案了. 接下来考虑如何得到这些图. 考虑随机生成一个 n 个点的图,它的生成树个数最大是 $n^{n-2}$ . 我们假装一个 n 个点的图的生成树个数是 $[0,n^{n-2}]$ 中的随机数. 假设我们随机生成了 S 个这样的图,如果我们在这 S 个图中随机选择

矩阵(神奇算法)

昨晚学长教了我们这样一个神奇的算法---矩阵快速幂,矩阵快速幂在递推优化上相当神奇,并且效率很高. 一. 先举这样一个例子.斐波那契数列大家都知道的吧.f[n]=f[n-1]+f[n+2](n=108),求f[n]; 这种题目,要是用递归做下去肯定超时.但是用矩阵就很容易解决. f[n]           *        0 1 = f[n+1] f[n+1] ...A       1 1 ...C  f[n+2] ...B A矩阵*C矩阵得到B矩阵.C矩阵是推出来的:主要的核心就是推出一个

文本比较算法Ⅱ——Needleman/Wunsch算法

在"文本比较算法Ⅰ--LD算法"中介绍了基于编辑距离的文本比较算法--LD算法. 本文介绍基于最长公共子串的文本比较算法--Needleman/Wunsch算法. 还是以实例说明:字符串A=kitten,字符串B=sitting 那他们的最长公共子串为ittn(注:最长公共子串不需要连续出现,但一定是出现的顺序一致),最长公共子串长度为4. 定义: LCS(A,B)表示字符串A和字符串B的最长公共子串的长度.很显然,LSC(A,B)=0表示两个字符串没有公共部分. Rev(A)表示反转

Java数据结构与算法(第七章高级排序1)

希尔排序 希尔排序是计算机科学家Donald L.Shell 而得名,他在1959年发现了希尔排序算法.希尔排序基于插入排序,但是增加了一个新的特性,大大提高了插入排序的执行效率. 插入排序:复制的次数太多 由于希尔排序是基于插入排序的,所以需要回顾下"插入排除".在插入排除执行的一半的时候,标记符左边这部分数据项都是排过序的(这些数据之间是有序的),而记右边的数据项没有排过序.这个算法取出标记符所指的数据项,把它存储在一个临时的变量.接着,从刚刚被移除的数据项的左边第一个单元看是,每

数组循环右移问题

首先,假设我们有一个具有6个元素的数组: 1,2,3,4,5,6 现在我们要对这个数组循环右移4次,我们很直接很够推出它的结果是:3,4,5,6,1,2 .但是我们如何去实现这样一个问题呢? 我觉得大家最容易想到的方法就是: step1:保存好数组中最后一个元素的值 step2:从第一个元素到倒数第二个元素依次向右移动一个位置 step3:然后将刚保存的值放到空出来的数组第一个位置 虽然这个方法想起来很简单,但是它的效率却不是很高,它的时间复杂度是O(n^2). 现在,我再介绍一种效率较高的算法

【矩阵乘法】【codevs 1250】Fibonacci数列

1250 Fibonacci数列 时间限制: 1 s 空间限制: 128000 KB 题目等级 : 钻石 Diamond 题目描述 Description 定义:f0=f1=1, fn=fn-1+fn-2(n>=2).{fi}称为Fibonacci数列. 输入n,求fn mod q.其中1<=q<=30000. 输入描述 Input Description 第一行一个数T(1<=T<=10000). 以下T行,每行两个数,n,q(n<=10^9, 1<=q<

文本比较算法:Needleman/Wunsch算法

本文介绍基于最长公共子序列的文本比较算法--Needleman/Wunsch算法.还是以实例说明:字符串A=kitten,字符串B=sitting那他们的最长公共子序列为ittn(注:最长公共子序列不需要连续出现,但一定是出现的顺序一致),最长公共子序列长度为4. 和LD算法类似,Needleman/Wunsch算法用的都是动态规划的思想,两者十分相似. 举例说明:A=GGATCGA,B=GAATTCAGTTA,计算LCS(A,B). 第一步:初始化动态转移矩阵 Needleman/Wunsch