上三角矩阵、矩阵转换、矩阵交换、杨辉三角详解

一 上三角矩阵

1.三角矩阵是什么?

主对角线的左下方元素全为0的矩阵称为上三角矩阵; 主对角线的右上方元素全为0的矩阵称为下三角矩阵; 上三角矩阵 和 下三角矩阵 统称为三角矩阵。

今天讲解的是上三角矩形,同时也会分析下三角矩阵,这两个思路是一样的,学会上三角矩阵,轻松搞定下三角矩阵。

2. 思路分析

在这里插入图片描述

3.代码的实现
#include<stdio.h>
int main()
{
	int n = 0;
	int arr[10][10] = { 0 };
	//表示矩阵是n*n个元素
	scanf("%d", &n);
	//输入这个n*n的矩阵
	for (int i = 0; i < n; i++)
	{
		for (int j = 0; j < n; j++)
		{
			scanf("%d", &arr[i][j]);
			//判断n*n的矩阵是否为上三角矩阵
			if (i > j)  //i<j 则是对下三角矩阵的判断
			{
				if (arr[i][j] != 0)
				{
					printf("NO\n");
					return 0;
				}
			}
		}
	}
	printf("YES\n");
	return 0;
}

三角矩阵的判断其实只要掌握做题的思路,就可以很容易的判断上三角矩阵或者是下三角矩阵。

二 矩阵转置

输入:2 3
1 2 3
4 5 6

输出:
1 4
2 5
3 6

思路:
在这里插入图片描述
代码:

#include <stdio.h>

int main() {
    int n=0;
    int m=0;
    int arr[10][10]={0};
    int i=0;
    int j=0;
    //输入n*m个元素的矩阵
    scanf("%d %d",&n,&m);
    //输入n行m列的元素
    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;
}

三 矩阵交换

1.描述

一个矩阵,经过k次行变换或列变换后得到的矩阵;
第一行包含两个整数n和m,表示一个矩阵包含n行m列;
接下来一行输入k,表示要执行k次操作,接下来有k行,每行包括一个字符t和两个数a和b,中间用空格格分隔,t代表需要执行的操作,当t为字符’r’时代表进行行变换,当t为字符’c’时代表进行列变换,a和b为需要互换的行或列;其他字符不处理
例如1:
输入:
2 2 //n*m个元素
1 2 /元素内容
3 4
1 //代表需要执行下面的一次操作
r 1 2 //r是行变化,第1行 和第2行是需要互换的行

例如2:
输入:
2 2
1 2
3 4
2 //代表需要执行下面的2次操作
c 1 2 //c是列变化,第1列和第2列是需要互换的列
t 1 2 //除了r和c,其他字符不处理

2. 思路

在这里插入图片描述

3. 代码
#include <stdio.h>

int main() {
    int n = 0, m = 0;
    int arr[10][10] = { 0 };
    scanf("%d %d", &n, &m);
    for (int i = 0; i < n; i++)
    {
        for (int j = 0; j < m; j++)
        {
            scanf("%d", &arr[i][j]);
        }
    }
    int k = 0;
    scanf("%d", &k);
    for (int i = 0; i < k; i++)
    {
        char t = 0;
        int a = 0, b = 0;
        scanf(" %c %d %d", &t, &a, &b);
        if (t == 'r')
        {
            //行交换
            for (int j = 0; j < n; j++)
            {
                int temp = 0;
                temp = arr[a - 1][j];
                arr[a - 1][j] = arr[b - 1][j];
                arr[b - 1][j] = temp;
            }
        }
        else if (t == 'c')
        {
            //列交换
            for (int j = 0; j < n; j++)
            {
                int temp = 0;
                temp = arr[j][a - 1];
                arr[j][a - 1] = arr[j][b - 1];
                arr[j][b - 1] = temp;
            }
        }
    }
    for (int i = 0; i < n; i++)
    {
        for (int j = 0; j < m; j++)
        {
            printf("%d ", arr[i][j]);
        }
        printf("\n");
    }
    return 0;
}

四 杨辉三角

杨辉三角:
1
1 1
1 2 1
1 3 3 1
1 4 6 4 1

在这里插入图片描述

3. 代码
#include<stdio.h>
int main()
{
	int arr[50][50] = { 0 };
	int n = 0;
	scanf("%d", &n);
	for (int i = 0; i < n; i++)
	{
		for (int j = 0; j < n; j++)
		{
			if (i == j || j == 0)
			{
				arr[i][j] = 1;
			}
			else if(i>=2&&j>=1)
			{
				arr[i][j] = arr[i - 1][j - 1] + arr[i - 1][j];
			}
		}
	}
	for (int i = 0; i < n; i++)
	{
		for (int j = 0; j <= i; j++)
		{
			printf("%5d", arr[i][j]);
		}
		printf("\n");
	}
	return 0;
}
  • 3
    点赞
  • 28
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

川子767

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

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

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

打赏作者

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

抵扣说明:

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

余额充值