文章目录

  • 一 上三角矩阵
  • 1.三角矩阵是什么?
  • 2. 思路分析
  • 3.代码的实现
  • 二 矩阵转置
  • 三 矩阵交换
  • 1.描述
  • 2. 思路
  • 3. 代码
  • 四 杨辉三角
  • 3. 代码


一 上三角矩阵

1.三角矩阵是什么?

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

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

2. 思路分析

R语言提取矩阵中上三角矩阵代码 r语言矩阵只留下上三角_算法

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

思路:

R语言提取矩阵中上三角矩阵代码 r语言矩阵只留下上三角_算法_02


代码:

#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. 思路

R语言提取矩阵中上三角矩阵代码 r语言矩阵只留下上三角_R语言提取矩阵中上三角矩阵代码_03

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

R语言提取矩阵中上三角矩阵代码 r语言矩阵只留下上三角_线性代数_04

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;
}