admin管理员组文章数量:1794759
c语言之矩阵
矩阵作为线性代数核心内容之一也是刷题人时常会遇到的一种类型。本篇博客简单介绍一下矩阵转置、上三角矩阵以及杨氏矩阵。
1.转置矩阵:输入m行n列的矩阵以n行m列的方式打印出来。只要将数组的行列进行交换即可,并不难想也不难写.(相应练习:牛客网BC107)
#include<stdio.h> int main() { int n = 0; int m = 0; scanf("%d%d", &n, &m); int arr[10][10] = { 0 }; int i = 0; int j = 0; for (i = 0; i < n; i++) { for (j = 0; j < m; j++) { scanf("%d", &arr[i][j]); } } for (i = 0; i < m; i++) { for (j = 0; j < n; j++) { printf("%d ", arr[j][i]); } printf("\\n"); } return 0; }2.上三角矩阵:对角线以下所有元素都为零,但凡有一个元素非零就不是上三角(相应练习:BC106)
#include<stdio.h> int main() { int n = 0; scanf("%d", &n); int arr[10][10] = { 0 }; int flag = 1;//表示是上三角 //读取元素 for (int i = 0; i < n; i++) { for (int j = 0; j < n; j++) { scanf("%d", &arr[i][j]); } } //数据读取完毕后开始判断 for (int i = 0; i < n; i++) { //对角线的位置i与j下标一样,这也就说明当j小于i时元素位于对角线下方 for (int j = 0; j < i; j++) { if (arr[i][j] != 0)//但凡对角线以下存在不为零的元素就表示不是上三角 { flag = 0; goto end; } } } end: if (flag == 1) printf("YES\\n"); else printf("NO\\n"); return 0; }3.杨氏矩阵:有一个数字矩阵,矩阵的每行从左到右是递增的,矩阵从上到下是递增的,请编写程序在这样的矩阵中查找某个数字是否存在。要求:时间复杂度为:O(n)
因为时间复杂度的要求,遍历数组的办法是不可行的。因此要采用特殊位置比较的方法。
代码如下:
#include<stdio.h> int mat_find(int arr[3][3], int* px, int* py, int k) { int x = 0; int y = *py-1; while (x <= (*px) - 1 && y >= 0) { if (arr[x][y] < k) { x++; } else if(arr[x][y]>k) { y--; } else { *px = x; *py = y; return 1; } } return 0; } int main() { int arr[3][3] = { 1,2,3,4,5,6,7,8,9 }; int k = 0;//查找元素 int a = 3; int b = 3; scanf("%d", &k); int ret = mat_find(arr, &a, &b, k); if (ret == 1) printf("%d %d \\n",a,b); else printf("找不到\\n"); return 0; }此代码通过改变a,b的位置来实现输出要寻找元素的下标,这样有一个缺陷就是:在二次调用mat_find之前要先将a和b的值重置,否则会导致查找失败。
结束语:
线代的学习因为疫情的原因是躲在屏幕后面上网课,导致我忘的比学的还快,因此很烦矩阵,不知道各位如何看待。那么今天的博客就写(水)到这里了,你学废了吗?
版权声明:本文标题:c语言之矩阵 内容由林淑君副主任自发贡献,该文观点仅代表作者本人, 转载请联系作者并注明出处:http://www.xiehuijuan.com/baike/1686626005a87883.html, 本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容,一经查实,本站将立刻删除。
发表评论