求一个3*3矩阵对角线元素之和
给定一个33的矩阵,请你求出对角线元素之和。
输入格式:
按照行优先顺序输入一个33矩阵,每个矩阵元素均为整数。
输出格式:
从左下角到右上角这条对角线上的元素之和
#include <stdio.h>
int main ()
{
int i , j , s[3][3] , sum = 0;
for (i = 0 ; i < 3 ; i++)
{
for (j = 0 ; j< 3 ; j++)
{
scanf("%d" , &s[i][j]);
if(i+j==2)
sum+=s[i][j];
}
}
printf("%d\n" , sum);
return 0;
}
求矩阵各行元素之和
本题要求编写程序,求一个给定的m×n矩阵各行元素之和。
输入格式:
输入第一行给出两个正整数m和n(1≤m,n≤6)。随后m行,每行给出n个整数,其间
以空格分隔。
输出格式:
每行输出对应矩阵行元素之和。
#include<stdio.h>
int main()
{
int a[10][10];
int i,j,m,n;
scanf("%d %d",&m,&n);
for(i=0;i<m;i++)
{
for(j=0;j<n;j++)
{
scanf("%d",&a[i][j]);
}
}
for(i=0;i<m;i++)
{
for(j=1;j<n;j++)
{
a[i][0]+=a[i][j];
}
}
for(i=0;i<m;i++)
printf("%d\n",a[i][0]);
return 0;
}
C语言实验- 对称矩阵的判定
输入矩阵的行数,再依次输入矩阵的每行元素,判断该矩阵是否为对称矩阵,若矩阵对称输出“Yes.",不对称输出"No."。
输入格式:
输入有多组,每一组第一行输入一个正整数N(N<=20),表示矩阵的行数(若N=0,表示输入结束)。
下面依次输入N行数据。
输出格式:
若矩阵对称输出“Yes.",不对称输出”No.”。
#include <stdio.h>
int main()
{
int n, i,j , cnt = 0, e;
while (scanf("%d", &n) != EOF && n)
{
e = n - 1;
e = 2 * e - 1;
int b[n][n];
for (i = 0; i < n; i++) {
for (j = 0; j < n; j++) {
scanf("%d", &b[i][j]);
}
}
for (i = 0; i< n; i++) {
for (j = 0; j < n; j++) {
if (b[i][j] == b[j][i])
{
if (i == j)
{
continue;
}
cnt++;
}
}
}
if (cnt / 2 == e) {
printf("Yes.\n");
}
else {
printf("No.\n");
}
}return 0;
}
C语言实验- 杨辉三角
1
1 1
1 2 1
1 3 3 1
1 4 6 4 1
1 5 10 10 5 1
上面的图形熟悉吗?它就是我们中学时候学过的杨辉三角。
杨辉三角,是二项式系数在三角形中的一种几何排列,中国南宋数学家杨辉1261年所著的《详解九章算法》一书中出现。在欧洲,帕斯卡(1623----1662)在1654年发现这一规律,所以这个表又叫做帕斯卡三角形。帕斯卡的发现比杨辉要迟393年,比贾宪迟600年。
21世纪以来国外也逐渐承认这项成果属于中国,所以有些书上称这是“中国三角形”(Chinese triangle)。
其实,中国古代数学家在数学的许多重要领域中处于遥遥领先的地位。中国古代数学史曾经有自己光辉灿烂的篇章,而杨辉三角的发现就是十分精彩的一页。
让我们开始做题吧!
输入格式:
输入数据包含多组测试数据。
每组测试数据的输入只有一个正整数n(1≤n≤30),表示将要输出的杨辉三角的层数。
输入以0结束。
输出格式:
对应于每一个输入,请输出相应层数的杨辉三角,每一层的整数之间用一个空格隔开,每一个杨辉三角后面加一个空行。
#include <stdio.h>
int main()
{
int n, i, j;
int a[31][31];
while(~scanf("%d", &n))
{
if(n == 0)
break;
for(i = 1; i <= n; i++)
{
a[i][i] = 1;
a[i][1] = 1;
}
for(i = 3; i <= n; i++)
{
for(j = 2; j <= i; j++)
{
a[i][j] = a[i - 1][j - 1] + a[i - 1][j];
}
}
for(i = 1; i <= n; i++)
{
for(j = 1; j <= i; j++)
{
if(j == 1) printf("%d", a[i][j]);
else printf(" %d", a[i][j]);
}
printf("\n");
}
printf("\n");
}
return 0;
}
C语言实验- 鞍点计算
找出具有m行n列二维数组Array的“鞍点”,即该位置上的元素在该行上最大,在该列上最小,其中1<=m,n<=10。同一行和同一列没有相同的数。
输入格式:
输入数据有多行,第一行有两个数m和n,下面有m行,每行有n个数。
输出格式:
按下列格式输出鞍点:
Array[i][j]=x
其中,x代表鞍点,i和j为鞍点所在的数组行和列下标,我们规定数组下标从0开始。
一个二维数组并不一定存在鞍点,此时请输出None。
我们保证不会出现两个鞍点的情况,比如:
3 3
1 2 3
1 2 3
3 6 8
#include <stdio.h>
int main()
{
int n,m,i,a[10][10],s=0,d,min,max,j,t1,t2;
scanf("%d%d",&m,&n);
for(i=0; i<m; i++)
for(j=0; j<n; j++)
scanf("%d",&a[i][j]);
for(i=0; i<m; i++)
{
max=a[i][0];
for(j=1; j<n; j++)
if(max<a[i][j])
{
max=a[i][j];
t1=i;
t2=j;
}
min=a[0][t2];
for(d=1; d<m; d++)
if(min>a[d][t2])
{
min=a[d][t2];
}
if(min==a[t1][t2])
{
printf("Array[%d][%d]=%d",t1,t2,min);
s++;
}
if(s!=0)
break;
}
if(s==0)
printf("None");
return 0;
}
C语言实验-矩阵转置
输入N*N的矩阵,输出它的转置矩阵。
输入格式:
第一行为整数N(1≤N≤100)。
接着是一个N*N的矩阵。
输出格式:
转置矩阵。
#include <stdio.h>
int main()
{
int a[100][100], n, i, j;
scanf("%d",&n);
for(i=0; i<n; i++)
for(j=0; j<n; j++)
scanf("%d",&a[i][j]);
for(i=0; i<n; i++)
{
for(j=0; j<n; j++)
{
if(j == 0)
printf("%d",a[j][i]);
else
printf(" %d",a[j][i]);
}
printf("\n");
}
return 0;
}
矩阵列平移
版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/qq_63806300/article/details/127787499
————————————————
版权声明:本文为CSDN博主「ོ栖落」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/qq_63806300/article/details/127787499
给定一个 n×n 的整数矩阵。对任一给定的正整数 k<n,我们将矩阵的偶数列的元素整体向下依次平移 1、……、k、1、……、k、…… 个位置,平移空出的位置用整数 x 补。你需要计算出结果矩阵的每一行元素的和。
输入格式:
输入第一行给出 3 个正整数:n(<100)、k(<n)、x(<100),分别如题面所述。
接下来 n 行,每行给出 n 个不超过 100 的正整数,为矩阵元素的值。数字间以空格分隔。
输出格式:
在一行中输出平移后第 1 到 n 行元素的和。数字间以 1 个空格分隔,行首尾不得有多余空格。
#include<stdio.h>
int main()
{
int n,k,x;
scanf("%d %d %d",&n,&k,&x);
int a[n][n];
int f=1;
for(int i=0;i<n;i++)
for(int j=0;j<n;j++)
{
scanf("%d",&a[i][j]);
}
for(int j=1;j<n;j+=2)
{
for(int i=n-1;i>=f;i--)
{
a[i][j] = a[i-f][j];
}
for(int i=0;i<f;i++)
{
a[i][j] = x;
}
f = f%k+1;
}
for(int i=0;i<n;i++)
{
int sum = 0;
for(int j=0;j<n;j++)
{
sum += a[i][j];
}
if(i==0) printf("%d",sum);
else printf(" %d",sum);
}
}
方阵循环右移
版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/myxk_/article/details/103765478
————————————————
版权声明:本文为CSDN博主「雁来月十六」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/myxk_/article/details/103765478
本题要求编写程序,将给定n×n方阵中的每个元素循环向右移m个位置,即将第0、1、⋯、n−1列变换为第n−m、n−m+1、⋯、n−1、0、1、⋯、n−m−1列。
输入格式:
输入第一行给出两个正整数m和n(1≤n≤6)。接下来一共n行,每行n个整数,表示一个n阶的方阵。
输出格式:
按照输入格式输出移动后的方阵:即输出n行,每行n个整数,每个整数后输出一个空格。
#include <stdio.h>
int main()
{
int a[6][6];
int m,n,i,j;
scanf("%d %d",&m,&n);
for (i=0; i<n; i++)
for(j=0;j<n;j++){
scanf("%d",&a[i][j]);
}
m%=n;
for (i=0; i<n; i++){
for (j=0; j<n; j++){
printf("%d ",a[i][(n-m+j)%n]);
}
printf("\n");
}
return 0;
}