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的值重置,否则会导致查找失败。

结束语:

线代的学习因为疫情的原因是躲在屏幕后面上网课,导致我忘的比学的还快,因此很烦矩阵,不知道各位如何看待。那么今天的博客就写(水)到这里了,你学废了吗?

                                                                       

  • 32
    点赞
  • 93
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 5
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

别动我的饭

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值