矩阵

由字符串变化为表(二维数组)

孤者浪人 提交于 2019-12-14 18:44:47
描述 Mo和Larry发明了一种信息加密方法。他们首先决定好列数,然后将信息(只包含字母)从上往下依次填入各列,并在末尾补充一些随机字母使其成为一个完整的字母矩阵。例如,若信息是“There's no place like home on a snowy night”并且有5列,Mo会写成: t o i o y h p k n n e l e a i r a h s g e c o n h s e m o t n l e w x 注意Mo只会填入字母,且全部是小写形式。在这个例子中,Mo用字母“x”填充了信息使之成为一个完整的矩阵,当然他使用任何字母都是可以的。 Mo根据这个矩阵重写信息:首先从左到右写下第一行,然后从右到左写下第二行,再从左到右写下第三行……以此左右交替地从上到下写下各行字母,形成新的字符串。这样,例子中的信息就被加密为:toioynnkpheleaigshareconhtomesnlewx。 你的工作是帮助Larry从加密后的信息中还原出原始信息(包括填充的字母)。 输入 第一行包含一个整数(范围2到20),表示使用的列数。 第二行是一个长度不超过200的字符串。 输出 一行,即原始信息。 样例输入 5 toioynnkpheleaigshareconhtomesnlewx 样例输出 theresnoplacelikehomeonasnowynightx #if

C++实验八:魔方问题

情到浓时终转凉″ 提交于 2019-12-14 09:46:08
首先现在看到题目的我一脸懵。毕竟是最后一个实验呀。还不用写实验报告,,,看正题: 魔方问题 : 编写函数createArithmeticSeq(),提示用户输入两个数字first和diff。然后函数创建一个按算术顺序排列的、有16个元素的数组并输出该算术序列。例如,如果first=21,diff=5,那么算术序列是21 26 31 36 41 ……96。 编写函数matricize(),它将一个有16个元素的一维数组和一个4行4列的二维数组作为参数。(其它的值,例如数组的大小,也必须作为参数来传递。)该函数将一维数组的元素放入到二维数组中。例如,如果A是在a中创建的一维数组,B是二维数组,那么将A的元素放入到B中后,数组B是: 21 26 31 36 41 46 51 56 61 66 71 76 81 86 91 96 编写一个函数reverseDiagonal(),倒转二维数组的两个对角线。例如,如果二维数组如b所示,那么在倒转两个对角线后,二维数组是: 96 26 31 81 41 71 66 56 61 51 46 76 36 86 91 21 编写一个函数magicCheck(),它将一个有16个元素的一维数组、一个4行4列的二维数组以及数组的大小作为参数。通过将一维数组的所有元素相加后被4除,该函数得到了magicNumber。该函数然后将每一行

矩阵转置

蓝咒 提交于 2019-12-14 02:35:06
矩阵转置 Problem Description 输入N*N的矩阵,输出它的转置矩阵。 Input 第一行为整数N(1≤N≤100)。 接着是一个N*N的矩阵。 Output 转置矩阵。 Sample Input 2 1 2 1 2 Sample Output 1 1 2 2 # include <stdio.h> # include <stdlib.h> int main ( ) { int a [ 101 ] [ 101 ] , n , i , j ; while ( ~ scanf ( "%d" , & n ) ) { for ( i = 1 ; i <= n ; i ++ ) { for ( j = 1 ; j <= n ; j ++ ) { scanf ( "%d" , & a [ i ] [ j ] ) ; } } for ( i = 1 ; i <= n ; i ++ ) { for ( j = 1 ; j <= n ; j ++ ) { if ( j == 1 ) printf ( "%d" , a [ j ] [ i ] ) ; else printf ( " %d" , a [ j ] [ i ] ) ; } printf ( "\n" ) ; } } return 0 ; } 来源: CSDN 作者: 咕咕咕咕咕~ 链接: https://blog.csdn

求大佬,链表地址为空的问题

∥☆過路亽.° 提交于 2019-12-14 02:16:40
上三角矩阵指主对角线以下的元素都为0的矩阵;主对角线为从矩阵的左上角至右下角的连线。 本题要求编写程序,判断一个给定的方阵是否上三角矩阵。 输入格式: 输入第一行给出一个正整数T,为待测矩阵的个数。接下来给出T个矩阵的信息:每个矩阵信息的第一行给出一个不超过10的正整数n。随后n行,每行给出n个整数,其间以空格分隔。 输出格式: 每个矩阵的判断结果占一行。如果输入的矩阵是上三角矩阵,输出“YES”,否则输出“NO” #include<stdio.h> #include<string.h> #include<stdlib.h> int n; struct num{ int a[10][10]; struct num *p; }; struct num k; int ok(struct num *); int main() { int t; scanf("%d",&t); struct num *beg,*pr; beg=&k;pr=&k; for(int i=0;i<t;i++){ scanf("%d",&n); if(i!=0){ pr->p=(struct num*)malloc(sizeof(struct num)+n*n*sizeof(int)); pr=pr->p; } else pr=(struct num*)malloc(sizeof(struct num)+n*n

对称矩阵的判定

混江龙づ霸主 提交于 2019-12-14 01:50:10
对称矩阵的判定 Problem Description 输入矩阵的行数,再依次输入矩阵的每行元素,判断该矩阵是否为对称矩阵,若矩阵对称输出“yes",不对称输出”no“。 Input 输入有多组,每一组第一行输入一个正整数N(N<=20),表示矩阵的行数(若N=0,表示输入结束)。 下面依次输入N行数据。 Output 若矩阵对称输出“yes",不对称输出”no”。 Sample Input 3 6 3 12 3 18 8 12 8 7 3 6 9 12 3 5 8 12 6 3 0 Sample Output yes no # include <stdio.h> # include <stdlib.h> int main ( ) { int a [ 20 ] [ 20 ] , n , i , j , flag ; while ( ~ scanf ( "%d" , & n ) && n != 0 ) { flag = 1 ; for ( i = 1 ; i <= n ; i ++ ) { for ( j = 1 ; j <= n ; j ++ ) { scanf ( "%d" , & a [ i ] [ j ] ) ; } } for ( i = 1 ; i <= n ; i ++ ) { for ( j = 1 ; j <= n ; j ++ ) { if ( a [ i ] [

矩阵的舞蹈

谁说胖子不能爱 提交于 2019-12-14 00:55:18
矩阵的舞蹈 Problem Description 矩阵是非常美妙的东西,可以用来解方程,以及解决一些图论的问题等,应用很广泛。即使没有学过线性代数,大家也一定接触过矩阵,在编程中可以理解为二维的表。 矩阵有很多操作就像舞蹈一样,如行列的置换,矩阵的转置等。今天我们只看矩阵的旋转,希望得到当前矩阵顺时针旋转90度以后得到的矩阵。 Input 输入数据的第一行是一个正整数T,代表有T组测试样例。接下来T组数据,每组数据第一行是两个整数M,N (0 < M , N < 100),分别代表矩阵的行数和列数。然后是矩阵本身,共M行,每行N个数据用空格隔开。 Output 对于每组输入的矩阵,第一行输出Case #k:(k为该组数据的序号,具体格式见样例),然后输出其旋转后的矩阵。 Sample Input 2 4 4 1 2 3 4 5 6 7 8 6 6 6 6 8 8 8 8 2 3 1 2 3 4 5 6 Sample Output Case #1: 8 6 5 1 8 6 6 2 8 6 7 3 8 6 8 4 Case #2: 4 1 5 2 6 3 # include <stdio.h> # include <stdlib.h> int main ( ) { int t , n , m , k , i , j , a [ 101 ] [ 101 ] ; scanf ( "%d"

蓝桥杯 算法训练 关联矩阵

▼魔方 西西 提交于 2019-12-14 00:37:15
如果可以,可以陪你千年不老,千年只想眷顾你倾城一笑;如果愿意,愿意陪你永世不离,永世只愿留恋你青丝白衣。 #include <iostream> #include <cstdio> #include <algorithm> #include <string> #include <cstring> #include <cstdlib> #include <cmath> #include <stack> #include <queue> #include <set> #include <map> #include <vector> #include <ctime> #include <cctype> #include <bitset> #include <utility> #include <sstream> #include <complex> #include <iomanip> #define inf 0x3f3f3f3f typedef long long ll; using namespace std; int n,m,mp[1010][1010],u,v; int main() { cin>>n>>m; for(int i=0; i<m; i++) { cin>>u>>v; u--; v--; mp[u][i]=1; mp[v][i]=-1; } for(int i=0;

1122:计算鞍点

本小妞迷上赌 提交于 2019-12-13 19:01:26
【题目描述】 给定一个5*5的矩阵,每行只有一个最大值,每列只有一个最小值,寻找这个矩阵的鞍点。鞍点指的是矩阵中的一个元素,它是所在行的最大值,并且是所在列的最小值。 例如:在下面的例子中(第4行第1列的元素就是鞍点,值为8 )。 11 3 5 6 9 12 4 7 8 10 10 5 6 9 11 8 6 4 7 2 15 10 11 20 25 【输入】 输入包含一个5行5列的矩阵。 【输出】 如果存在鞍点,输出鞍点所在的行、列及其值,如果不存在,输出"not found"。 【输入样例】 11 3 5 6 9 12 4 7 8 10 10 5 6 9 11 8 6 4 7 2 15 10 11 20 25 【输出样例】 4 1 8 #include <iostream> using namespace std; int main() { int a[5][5],flag,judge=1,max[5]; int i,j; for(i=0;i<5;i++) { for(j=0;j<5;j++) { cin>>a[i][j]; } } //若a[5]=0则负数无法排除 for(i=0;i<5;i++) { max[i]=a[i][0]; flag=0; //考虑a[i][0]最大 for(j=0;j<5;j++) { if(a[i][j]>max[i]) { max[i]=a[i]

python中shape()的简单用法

感情迁移 提交于 2019-12-13 15:38:26
shape函数是numpy.core.fromnumeric中的函数,它的功能是读取矩阵的长度,比如shape[0]就是读取矩阵第一维度的长度。 shape的输入参数可以是一个整数(表示维度),也可以是一个矩阵。以下例子可能会好理解一些: import numpy as np x = np . array ( [ [ 1 , 2 , 5 ] , [ 2 , 3 , 5 ] , [ 3 , 4 , 5 ] , [ 2 , 3 , 6 ] ] ) #输出数组的行和列数 print x . shape #结果: ( 4 , 3 ) #只输出行数 print x . shape [ 0 ] #结果: 4 #只输出列数 print x . shape [ 1 ] #结果: 3 来源: CSDN 作者: 李子岐 链接: https://blog.csdn.net/weixin_42349855/article/details/103525855

剑指offer - 二维数组中的查找

孤街浪徒 提交于 2019-12-13 13:04:24
  这题我总觉得 oj 有问题。。。就算真的复杂度很高,也不可能通不过一个样例吧。。。   第一眼没注意到每一列都从上到下递增,写出来的算法平均时间复杂度为 O(lgn * lgm),最坏为O(nlgm),思路就是对第一列做二分查找得到一个行区间,然后遍历行区间,对每一行做二分查找,但提交后有段错误(本地 MSVC 编译、运行没问题)。。。   然后又认真看一遍题之后,经过思考各种边界情况,优化了很多小地方的查找步数,时间复杂度肯定比第一个小很多,所以有点不敢相信居然超时? class Solution { public: bool Find(int target, std::vector<std::vector<int>> array) { if (array.empty()) return false; if (array[0][0] > target) return false; if (array[array.size() - 1][array[0].size() - 1] < target) return false; int start_col = 0, end_col = array.size() - 1, mid_col = (start_col + end_col) / 2; while (array[start_col][0] < target &&