突然想到矩阵问题还没弄透,通过这次机会总结优化一下
一.
矩阵是非常美妙的东西,可以用来解方程,以及解决一些图论的问题等,应用很广泛。即使没有学过线性代数,大家也一定接触过矩阵,在编程中可以理解为二维的表。矩阵有很多操作就像舞蹈一样,如行列的置换,矩阵的转置等。今天我们只看矩阵的旋转,希望得到当前矩阵顺时针旋转90度以后得到的矩阵。
Input
输入数据的第一行是一个正整数T,代表有T组测试样例。接下来T组数据,每组数据第一行是两个整数M,N (0 < M , N < 100),分别代表矩阵的行数和列数。然后是矩阵本身,共M行,每行N个数据用空格隔开。
Output
对于每组输入的矩阵,第一行输出Case #k:(k为该组数据的序号,具体格式见样例),然后输出其旋转后的矩阵。
Examples
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
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
这题简单了来说就是要求当前矩阵顺时针旋转90度以后得到的矩阵。
看题目要先观察啊,不难发现,经过旋转,第一列成了第一行,第二列变成了第二行,
这样就好办了,因为输出时一行一行输出,代码如下
#include<stdio.h>
int main()
{
int n,x,y,a[1000][1000];
scanf("%d",&n);//输入要测试的组数
for(int z=1;z<=n;z++)//循环n次
{
scanf("%d %d",&x,&y);//x行y列
for(int i=0;i<x;i++)//输入数组
{
for(int j=0;j<y;j++)
scanf("%d ",&a[i][j]);
}
printf("Case #%d:\n",z);
for(int q=0;q<y;q++)//列在外层循环
{
for(int w=x-1;w>=0;w--)
printf("%d ",a[w][q]);
printf("\n");
}
}
}
二.
输入一个正整数n(1<=n<=10),再输入n*n的矩阵,要求求该矩阵的下三角元素之和。
Input
输入包括n+1行。
第一行为整数n;
接下来的n行为矩阵数据。
Output
矩阵的下三角元素之和。
Examples
input
5 1 2 3 4 5 2 3 4 5 6 3 4 5 6 7 4 5 6 7 8 5 6 7 8 9
output
75
由题意可得,矩阵一定为方阵,对于二维数组a[i][j],下三角就是i>=j时,可得
if(i>=j) sum+=a[i][j];
#include<stdio.h>
int main()
{
int sum=0,n,a[100][100];
scanf("%d",&n);
for(int i=0;i<n;i++)//依旧是二层循环写二维数组
{
for(int j=0;j<n;j++)
{
scanf("%d",&a[i][j]);
}
}
for(int i=0;i<n;i++)//对二维数组的元素一个一个判断
{
for(int j=0;j<n;j++)
{
if(i>=j)
sum=sum+a[i][j];
}
}
printf("%d",sum);
}
三.
输入矩阵的行数,再依次输入矩阵的每行元素,判断该矩阵是否为对称矩阵,若矩阵对称输出“yes",不对称输出”no“。
Input
输入有多组,每一组第一行输入一个正整数N(N<=20),表示矩阵的行数(若N=0,表示输入结束)。
下面依次输入N行数据。
Output
若矩阵对称输出“yes",不对称输出”no”。
Examples
input
3 6 3 12 3 18 8 12 8 7 3 6 9 12 3 5 8 12 6 3 0
output
yes no
对称矩阵,即a[i][j]==a[j][i];因为n==0时退出,可以使用break
#include<stdio.h>
int main()
{
int n,a[100][100];
while(scanf("%d",&n)!=EOF)
{
int flag=0;//判断是否是对称矩阵,如果有一个不符合的,则flag改变
if(n==0)
break;
else
{
for(int i=0;i<n;i++)
{
for(int j=0;j<n;j++)
{
scanf("%d",&a[i][j]);
}
}
for(int i=0;i<n;i++)
{
for(int j=0;j<n;j++)
{
if(a[i][j]!=a[j][i])
flag=1;
break;
}
}
if(flag==0)
printf("yes\n");
else
printf("no\n");
}
}
}