PTA-练习5

目录

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

实验7-2-2 矩阵运算

实验7-2-3 求矩阵的局部极大值

实验7-2-5 判断上三角矩阵 

实验7-2-6 打印杨辉三角

实验7-2-7 方阵循环右移

实验7-2-8 找鞍点


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

#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#include<math.h>

int main(){

    int m,n;
    scanf("%d %d",&m,&n);
    for(int i=0;i<m;i++){
        int a;
        int sum=0;//每行的和
        for(int j=0;j<n;j++){
            scanf("%d",&a);
            sum=sum+a;
        }
        printf("%d\n",sum);
    }

    return 0;
}


实验7-2-2 矩阵运算

//遍历每个元素,i代表行,j代表列,
//如果i+j==n-1||i==n-1||j==n-1就不加这些元素
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#include<math.h>

int main(){

    int n;
    scanf("%d",&n);
    int a=0,sum=0;
    
    for(int i=0;i<n;i++){
        for(int j=0;j<n;j++){
            scanf("%d",&a);
            if(i+j!=n-1&&i!=n-1&&j!=n-1){
                sum=sum+a;
            }
        }
    }
    printf("%d",sum);
    return 0;
}

实验7-2-3 求矩阵的局部极大值


#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#include<math.h>

int main(){

    int m,n;
    scanf("%d %d",&m,&n);
    int a[m][n];
    for(int i=0;i<m;i++){
        for(int j=0;j<n;j++){
            scanf("%d",&a[i][j]);
        }
    }

    int flag=0;
    for(int i=1;i<m-1;i++){
        for(int j=1;j<n-1;j++){
            if(a[i][j]>a[i-1][j]&&a[i][j]>a[i][j-1]&&a[i][j]>a[i+1][j]&&a[i][j]>a[i][j+1]){
                printf("%d %d %d\n",a[i][j],i+1,j+1);
                flag=1;
            }
        }
    }
    if(flag==0){
        printf("None %d %d",m,n);
    }
    return 0;
}

 

#include<stdio.h>
 
int main(){
	
	int i,j,k;
	for( i=0;i<10;i++){
		for( j=0;j<20;j++){
			for( k=0;k<30;k++){
				if(i==2&&j==5&&k==10){
					
					goto out;//去往标识符
				}
			}
			
		}
			
	}
	out://(标识符)
	printf("%d,%d,%d",i,j,k);
	
}


实验7-2-5 判断上三角矩阵 

 

//下半区全都是0,a[i][j]==0,当i>j


#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#include<math.h>

int main(){

    int x;
    scanf("%d",&x);

    for(int k=0;k<x;k++){//输入的x个矩阵
        int n;
        scanf("%d",&n);
        int a[n][n];
        for(int i=0;i<n;i++){
            for(int j=0;j<n;j++){
                scanf("%d",&a[i][j]);
            }
        }//输入矩阵
        
        int flag=1;
        for(int i=0;i<n;i++){
            for(int j=0;j<n;j++){
                if(i>j&&a[i][j]!=0){
                    printf("NO\n");
                    flag=0;
                    goto haha;
                }
            }
        }//判断矩阵是不是上三角
        haha:
        if(flag==1){
            printf("YES\n");
        }
    }

    return 0;
}

实验7-2-6 打印杨辉三角

这题好难,遇见这种要找空格规律的最麻烦了。

杨辉三角的特点:

  1. 下三角矩阵
  2. 第一列和主队角线元素为1
  3. 其他元素=上面的元素+左上角的元素

 

随后的每一行,开头和最后的数字都是1,其他的每个数都是它左上方和右上方的数之和,就是说除每行最左侧与最右侧的数字以外,每个数字等于它的左上方与上方两个数字之和。 


#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#include<math.h>

int main(){

    int N;
    scanf("%d",&N);

    /*if(N==1){
        printf("   1");
    }
    if(N==2){
        printf("    1\n");
        printf("   1   1\n");
    }
*///先得4分再说

	int a[N][N];
	int i, j;
	
	for( i = 0; i < N; i++ ){
		for( j = 0; j < N; j++ ){
			if( j == 0 || j == i ){
				a[i][j] = 1;
			}	
		}
	}
	
	for( i = 2; i < N; i++ ){
		for( j = 1; j < i; j++ ){
			a[i][j] = a[i-1][j-1] + a[i-1][j];
		}
	}

	for( i = 0; i < N; i++ ){//每行先打印N-i-1个空格
		for(int k=0;k<N-i-1;k++){
            printf(" ");
        }
        //输出矩阵的下三角
		for( j = 0; j <= i; j++ ){
			printf( "%4d", a[i][j] );//每个数字固定4位
		}//不能写"   %d",因为后面的数字有可能两位,三位。
		printf("\n");
	}

    return 0;
}

 实验7-2-7 方阵循环右移

 

//移动每行的元素,j列数变成(j+2)%(n)


#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#include<math.h>

int main(){

    int m,n;
    scanf("%d %d",&m,&n);
    int a[n][n];
    for(int i=0;i<n;i++){
        for(int j=0;j<n;j++){
            scanf("%d",&a[i][j]);
        }
    }
    int b[n][n];
    for(int i=0;i<n;i++){
        for(int j=0;j<n;j++){
            b[i][(j+m)%(n)]=a[i][j];
        }
    }

    for(int i=0;i<n;i++){
        for(int j=0;j<n;j++){
            printf("%d ",b[i][j]);
        }
        if(i<n-1){
            printf("\n");
        }
        
    }

    
    return 0;
}

实验7-2-8 找鞍点

//遍历每行,再遍历最大值所在的列看看是不是最小的

//移动每行的元素,j列数变成(j+2)%(n)


#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#include<math.h>

int main(){

    int n;
    scanf("%d",&n);
    int a[n][n];
    for(int i=0;i<n;i++){
        for(int j=0;j<n;j++){
            scanf("%d",&a[i][j]);
        }
    }
    int flag;
    int i;
    int lie=0;
    for(i=0;i<n;i++){
        int max=a[i][0];
        
        for(int j=0;j<n;j++){
            if(a[i][j]>=max){
                max=a[i][j];
                lie=j;
            }
        }//每一行
        flag=1;
        for(int k=0;k<n;k++){//遍历最大值所在的列
            if(a[k][lie]<max){
                flag=0;
                break;
            }
        }
        if(flag==1){
            break;
        }
    }
    if(flag){
        printf("%d %d",i,lie);
    }else{
        printf("NONE");
    }
//循环里面的变量只是暂时的
    return 0;
}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

西柚小萌新吖(●ˇ∀ˇ●)

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

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

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

打赏作者

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

抵扣说明:

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

余额充值