Galaxy星 2021-05-30 23:18 采纳率: 100%
浏览 46
已采纳

C语言寻找鞍点 代码运行时无法得到正确输出 怎样修改才能得到鞍点值呢

#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
void main()
{
    int column, row;//分别声明列 行
    int i, j;
    int k = 0, l = 0;
    int rmax, cmin;//分别声明行最大 列最小
    int a[100][100];
    //初始化 行 和 列
    printf("input row size(number of columns):");
    scanf("%d", &row);
    printf("input column size(number of rows):");
    scanf("%d", &column);
    //输入 行 和 列 中的元素
    for (i = 0;i < row;i++)
    {
        printf("input the items of row%d:", i);
        for (j = 0;j < column;j++)
        {

            scanf("%d", &a[i][j]);
        }

    }
    //打印输入的数组元素
    printf("the array you input is:\n");
    for (i = 0; i < row; i++)
    {
        for (j = 0;j < column;j++)
            printf("%d ", a[i][j]);
        printf("\n");
    }


    //寻找该数组中的鞍点
    for (i = 0;i < row;i++)
    {
        rmax = 0;
        k = 0;
        for (j = 0; j < column;j++)
        {
            if (rmax < a[i][j])
            {
                rmax = a[i][j];
                k = j;
            }
        }


        cmin = 0;
        l = 0;
        for (i = 0;i < row;i++)
        {
            if (cmin > a[i][k])
            {
                cmin = a[i][k];
                l = i;
            }
        }
        if (rmax == cmin)
        {
            printf("the saddle point is found!its position is a[% d][% d], and a[% d][% d] is % d ", l, k, l, k, rmax);
        }
    }
}

  • 写回答

2条回答 默认 最新

  • 关注

    鞍点列子,参考一下。

     

    
    #include "stdio.h"
    void main()
    {
    	
        /*
        	鞍点:
        		1.该位置上的元素在该行最大;
        		2.该位置上的元素在该列最小,也可能没有;
        		
        */
        int a[][4]={
        	{1, 2, 3, 4},
        	{5, 6, 7, 8},	
        	{9, 10,11,12},
        	{13,14,15,16}
        };
        int i,j,min,max,t=0,t2=0;
        //打印数组
        for(i=0;i<4;i++)
    	{
    		for(j=0;j<4;j++)
    			printf("%d\t",a[i][j]);	
    		printf("\n");	
    	}
        
        for(i=0;i<4;i++) //行
        {
        	t=0;
        	max=a[i][0];//初始值
        	for(j=1;j<4;j++) //求当前行的最大值
        	{
        		if(max<a[i][j]){
        			max = a[i][j];	
        			t = j;//最大值所在的列
        		}
        	}
        	t2=i;//临时保存
        	
        	min=a[0][t]; //求当前列的最小值
        	//求第t列的最小值
        	for(j=0;j<4;j++) //j代表行;
        	{
        		if(min>a[j][t])
        		{
        			min=a[j][t];
        			t2=j;	
        		}
        	}
        	if(i==t2){//同一行,同一列
        		printf("%d行的第%d列的%d是鞍点",t2+1,t+1,a[t2][t]);	
        	}	
        	
        }
    }
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(1条)

报告相同问题?

悬赏问题

  • ¥15 对于相关问题的求解与代码
  • ¥15 ubuntu子系统密码忘记
  • ¥15 信号傅里叶变换在matlab上遇到的小问题请求帮助
  • ¥15 保护模式-系统加载-段寄存器
  • ¥15 电脑桌面设定一个区域禁止鼠标操作
  • ¥15 求NPF226060磁芯的详细资料
  • ¥15 使用R语言marginaleffects包进行边际效应图绘制
  • ¥20 usb设备兼容性问题
  • ¥15 错误(10048): “调用exui内部功能”库命令的参数“参数4”不能接受空数据。怎么解决啊
  • ¥15 安装svn网络有问题怎么办