PTA C语言·找鞍点

题目
解法:

#include<stdio.h>
int main()
{
    int i,j,n,s[6][6],a[6],b[6];

    scanf("%d",&n);
    for(i=0;i<n;i++)
    {
        for(j=0;j<n;j++)
        scanf("%d",&s[i][j]);
    }
    /*输入矩阵到二维数组*/

    for(i=0;i<n;i++)
    {
        int max=s[i][0];
        for(j=0;j<n;j++)
        if(s[i][j]>max)max=s[i][j];
        a[i]=max;
    }
     for(j=0;j<n;j++)
    {
        int min=s[0][j];
        for(i=0;i<n;i++)
        if(s[i][j]<min)min=s[i][j];
        b[j]=min;
    }
    /*将每行每列的最值存入数组a b*/
    for(i=0;i<n;i++)
    {
        for(j=0;j<n;j++)
        if(a[i]==b[j]&&s[i][j]==a[i])
        {
            printf("%d %d",i,j);
            return 0;   
        }
    }
    /*如果某行max=某列min 检查这个坐标上的数值*/
    printf("NONE");
    return 0;
}
大一学习C语言的学生可能会遇到求解数学优化问题中的鞍点,通常是在二维函数中到局部极值点。不过,这通常是一个复杂的数值计算问题,不适合直接编写简单的一维C语言代码来解决。在C语言中,更常见的是使用循环和条件判断来实现基本的算法,例如梯度下降法的简化版,但这需要一定的数学知识和算法理解。 下面是一个简单的示例,展示如何在一个二维数组(比如代表函数值的矩阵)上寻局部最小值(鞍点的一种情况),而不是严格的全局鞍点: ```c #include <stdio.h> // 比较函数值 int compare(int a, int b) { return a > b ? -1 : (a == b ? 0 : 1); } // 查鞍点(这里假设局部最小) void find_minima(int matrix[ROW][COL], int row, int col) { int min_row = row; int min_col = col; for(int i=0; i<ROW; ++i) { if(matrix[i][col] < matrix[min_row][col]) { min_row = i; } } for(int j=0; j<COL; ++j) { if(matrix[min_row][j] < matrix[min_row][col]) { min_col = j; } } printf("Found local minimum at (%d, %d): %d\n", min_row, min_col, matrix[min_row][min_col]); } int main() { const int ROW = COL = 5; int matrix[ROW][COL]; // 请填充实际的函数值 // 填充矩阵并调用查函数 // ... find_minima(matrix, 0, 0); // 起始位置 return 0; } ``` 这个代码只是一个基础框架,实际应用中可能需要根据具体的优化算法和函数特性进行调整。同时,寻鞍点通常涉及更复杂的技术,如牛顿迭代法或者梯度法,这超出了C语言初学者的范围。
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值