• 2022山东理工大学pta程序设计---实验六(二维数组)题解


    7-1 sdut-C语言实验-求一个3*3矩阵对角线元素之和

    分数 12
    作者 马新娟
    单位 山东理工大学
    给定一个33的矩阵,请你求出对角线元素之和。

    输入格式:
    按照行优先顺序输入一个33矩阵,每个矩阵元素均为整数。

    输出格式:
    从左下角到右上角这条对角线上的元素之和。

    输入样例:
    1 2 3
    3 4 5
    6 0 1
    输出样例:
    在这里给出相应的输出。例如:

    13

    #include
    int main()
    {
        int i,j,sum=0;
        int a[3][3];
    
        for(i=0;i<3;i++)
        {
            for(j=0;j<3;j++)
            {
                scanf("%d", &a[i][j]);
            }
        }
    
        for(i=0,j=2;i<3;i++,j--)
        {
            sum=sum+a[i][j];
        }
    
        printf("%d",sum);
    
        return 0;
    }
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24

    7-2 求矩阵各行元素之和

    分数 15
    作者 C课程组
    单位 浙江大学
    本题要求编写程序,求一个给定的m×n矩阵各行元素之和。

    输入格式:
    输入第一行给出两个正整数m和n(1≤m,n≤6)。随后m行,每行给出n个整数,其间

    以空格分隔。

    输出格式:
    每行输出对应矩阵行元素之和。

    输入样例:
    3 2
    6 3
    1 -8
    3 12
    输出样例:
    9
    -7
    15

    #include
    int main(){
        int m,n,i,j,c;
        scanf("%d %d",&m,&n);
        int a[m][n];
        for(i=0;i<m;i++){
            c=0;
            for(j=0;j<n;j++){
                scanf("%d",&a[i][j]);
                c+=a[i][j];
            }
            printf("%d\n",c);
        }
        return 0;
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15

    7-3 sdut-C语言实验- 对称矩阵的判定

    分数 13
    作者 马新娟
    单位 山东理工大学
    输入矩阵的行数,再依次输入矩阵的每行元素,判断该矩阵是否为对称矩阵,若矩阵对称输出“Yes.“,不对称输出"No.”。

    输入格式:
    输入有多组,每一组第一行输入一个正整数N(N<=20),表示矩阵的行数(若N=0,表示输入结束)。
    下面依次输入N行数据。

    输出格式:
    若矩阵对称输出“Yes.",不对称输出”No.”。

    输入样例:
    3
    6 3 12
    3 18 8
    12 8 7
    3
    6 9 12
    3 5 8
    12 6 3
    0
    输出样例:
    Yes.
    No.

    #include 
    int main()
    {
        int a,c,d,cnt=0,e;
        while(scanf("%d",&a)!=EOF&&a){
        e=a-1;
        e=2*e-1;
        int b[a][a];
        for(c=0;c<a;c++){
            for(d=0;d<a;d++){
                scanf("%d",&b[c][d]);
            }
        }
        for(c=0;c<a;c++){
            for(d=0;d<a;d++){
                if(b[c][d]==b[d][c]){
                    if(c==d){
                        continue;
                    }
                    cnt++;
                }
            }
        }
        if(cnt/2==e){
                printf("Yes.\n");
        }else{
            printf("No.\n");
        }
    }
     }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30

    7-4 sdut-C语言实验- 杨辉三角

    分数 10
    作者 马新娟
    单位 山东理工大学
    1
    1 1
    1 2 1
    1 3 3 1
    1 4 6 4 1
    1 5 10 10 5 1
    上面的图形熟悉吗?它就是我们中学时候学过的杨辉三角。

    输入格式:
    输入数据包含多组测试数据。
    每组测试数据的输入只有一个正整数n(1≤n≤30),表示将要输出的杨辉三角的层数。
    输入以0结束。

    输出格式:
    对应于每一个输入,请输出相应层数的杨辉三角,每一层的整数之间用一个空格隔开,每一个杨辉三角后面加一个空行。

    输入样例:
    2
    3
    0
    输出样例:
    1
    1 1

    1
    1 1
    1 2 1

    #include
    int main()
    {
        int n;
        while(~scanf("%d",&n)&&n){
            int a[n][n];
            a[0][0]=1;
            printf("1\n");
            for(int i=1;i<n;i++){
                for(int j=0;j<=i;j++){
                    if(j==0){a[i][j]=1;printf("1 ");}
                    else if(j==i){a[i][j]=1;printf("1");}
                    else {a[i][j]=a[i-1][j-1]+a[i-1][j];
                    printf("%d ",a[i][j]);}
                }
                printf("\n");
                }printf("\n");
        }
    }
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20

    7-5 sdut-C语言实验- 鞍点计算

    分数 12
    作者 马新娟
    单位 山东理工大学
    找出具有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

    输入样例:
    3 3
    1 2 3
    4 5 6
    7 8 9
    输出样例:
    Array[0][2]=3

    #include 
    #include 
    
    int main()
    {
        int m,n,i,j,a[10][10],b,c,d,t;
        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++)
        {
            d=i;
            b=0;
            t=0;
            for(j=0;j<n;j++)
            {
                if(a[i][j]>a[d][b])
                {
                    b=j;
                    d=i;
                }
            }
            for(c=0;c<m;c++)
            {
                if(a[c][b]<a[d][b])
                    break;
                else
                    t=t+1;
            }
            if(t==m)
            {
                printf("Array[%d][%d]=%d",d,b,a[d][b]);
                break;
            }
        }
           if(t!=m)
                printf("None");
        return 0;
    }
    
    
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42
    • 43
    • 44
    • 45
    • 46
    • 47

    7-6 sdut- C语言实验-矩阵转置

    分数 9
    作者 马新娟
    单位 山东理工大学
    输入N*N的矩阵,输出它的转置矩阵。

    输入格式:
    第一行为整数N(1≤N≤100)。
    接着是一个N*N的矩阵。

    输出格式:
    转置矩阵。

    输入样例:
    2
    1 2
    1 2
    输出样例:
    1 1
    2 2

    #include
    int main()
    {
        int n,j,i;
    
        int a[100][100];
    
        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;
    }
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34

    7-7 矩阵列平移

    分数 20
    作者 陈越
    单位 浙江大学
    给定一个 n×n 的整数矩阵。对任一给定的正整数 k

    输入格式:
    输入第一行给出 3 个正整数:n(<100)、k(

    接下来 n 行,每行给出 n 个不超过 100 的正整数,为矩阵元素的值。数字间以空格分隔。

    输出格式:
    在一行中输出平移后第 1 到 n 行元素的和。数字间以 1 个空格分隔,行首尾不得有多余空格。

    输入样例:
    7 2 99
    11 87 23 67 20 75 89
    37 94 27 91 63 50 11
    44 38 50 26 40 26 24
    73 85 63 28 62 18 68
    15 83 27 97 88 25 43
    23 78 98 20 30 81 99
    77 36 48 59 25 34 22
    输出样例:
    440 399 369 421 302 386 428
    样例解读

    需要平移的是第 2、4、6 列。给定 k=2,应该将这三列顺次整体向下平移 1、2、1 位(如果有更多列,就应该按照 1、2、1、2 …… 这个规律顺次向下平移),顶端的空位用 99 来填充。平移后的矩阵变成:

    11 99 23 99 20 99 89
    37 87 27 99 63 75 11
    44 94 50 67 40 50 24
    73 38 63 91 62 26 68
    15 85 27 26 88 18 43
    23 83 98 28 30 25 99
    77 78 48 97 25 81 22

    #include
    int main()
    {
    	int n,m,k,i,j,p=1,a[100][100],sum=0;
    	scanf("%d %d %d",&n,&m,&k);
    	for(i=0;i<n;i++)
    		for(j=0;j<n;j++)
    			scanf("%d",&a[i][j]);		
    	for(i=n-1;i>=0;i--)    //从最后一行开始 
    	{
    		p=1;
    		for(j=0;j<n;j++)
    		{
    			if((j+1)%2==0)   //偶数列 
    			{
    				if(i-p>=0)            //判断 a数组中 以i-p为下标的元素是否存在 
    					a[i][j]=a[i-p][j];      //存在 向下移p个单位 
    				else                    //不存在 添k 
    					a[i][j]=k;
    				p++;          //移动的单位是1、2...p 接着 1、2...p
    				if((p>m))     //如果数组大 或者m的值小 p接着从1开始 
    					p=1; 
    			}	
    		}
    	}	
    	for(i=0;i<n;i++)            //求每一列的和 
    	{
    		for(j=0;j<n;j++)  
    			sum+=a[i][j];
    		if(i<n-1)              //控制空格 
    			printf("%d ",sum);
    		else
    			printf("%d",sum);
    		sum=0;
    	}
    	return 0;	
    } 
    
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39

    7-8 方阵循环右移

    分数 20
    作者 颜晖
    单位 浙大城市学院
    本题要求编写程序,将给定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个整数,每个整数后输出一个空格。

    输入样例:
    2 3
    1 2 3
    4 5 6
    7 8 9
    输出样例:
    2 3 1
    5 6 4
    8 9 7

    #include 
     
    int main(){
        int n, m, i, j;
        
        scanf("%d %d", &m, &n);
        
        int array[n][n];
        
        for( i=0; i<n; i++ )
            for( j=0; j<n; j++ )
                scanf(" %d", &array[i][j]);
        
        m %= n; // 确保m的值 
        
        for( i=0; i<n; i++ ){
            for( j=0; j<n; j++ )
                printf("%d ", array[i][(n-m+j)%n]);
            putchar('\n');
        }
        
        return 0;
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
  • 相关阅读:
    Docker简易部署RabbitMQ集群、分布式事务解决方案+案例(可靠生产、可靠消费)
    [论文阅读] 颜色迁移-颜色空间的选择
    MSDC 4.3 接口规范(16)
    深度学习面试题
    【Linux】网络协议:(序列化和反序列化)json 的安装和简单使用
    浅谈人工智能怎么提升工作效率
    Docker手把手教程(一)概述 & 安装
    基于国产银河飞腾多核 DSP +FPGA的图像识别硬件设计与算法实现
    使用HTML+CSS技术制作篮球明星介绍网站
    MYSQL 不同的表格式,导致不同的存储空间消耗和性能差异 横向评测
  • 原文地址:https://blog.csdn.net/m0_72900498/article/details/127529579