精华内容
下载资源
问答
  • 2021-12-22 15:30:58

    描述

    给定一个5*5的矩阵,每行只有一个最大值,每列只有一个最小值,寻找这个矩阵的鞍点。
    鞍点指的是矩阵中的一个元素,它是所在行的最大值,并且是所在列的最小值。
    例如:在下面的例子中(第4行第1列的元素就是鞍点,值为8 )。
    11 3 5 6 9
    12 4 7 8 10
    10 5 6 9 11
    8 6 4 7 2
    15 10 11 20 25

    输入

    输入包含一个5行5列的矩阵

    输出

    如果存在鞍点,输出鞍点所在的行、列及其值,如果不存在,输出"not found"

    样例输入

    11 3 5 6 9
    12 4 7 8 10
    10 5 6 9 11
    8 6 4 7 2
    15 10 11 20 25

     样例输出

    4 1 8

    #include <iostream>
    #include<cstring>
    #include<climits>
    
    using namespace std;
    
    # define N 5
    int maxn[N]{-1},minn[N],ans[N][N];
    
    int main() {
        int i, j;
        //填充
        for(i=0;i<N;i++)
            for(j=0;j<N;j++)
                cin >> ans[i][j];
        memset(maxn, -1, sizeof(maxn));
        for (i = 0; i < N; i++)
            minn[i] = INT_MAX;
        //找每行最大值,每列最小值
        for (i = 0; i < N; i++)
            for (j = 0; j < N; j++) {
                if (ans[i][j] > maxn[i])
                    maxn[i] = ans[i][j];
                if (ans[i][j] < minn[j])
                    minn[j] = ans[i][j];
            }
        //判断
        for(i=0;i<N;i++)
            for(j=0;j<N;j++)
            if (maxn[i] == minn[j]) {
                cout << i+1 << ' ' << j+1 << ' ' <<maxn[i] << endl;
                return 0;
            }
        cout << "not found" << endl;
        return 0;
    }

    21.12.22

    更多相关内容
  • C++算法,在矩阵中寻找鞍点。它在该行中最大,而在该列中最小。我们把这样的元素称为“鞍点”。一个矩阵可能没有鞍点,要存在鞍点也只能有一个。输出结果和鞍点位置
  • 寻找鞍点

    2020-05-04 11:32:13
    @[T #include <stdio.h> int main() { int a[6][6];...//flag说明,若flag为1时即判断出有鞍点,反之则无 int k; scanf("%d",&n); for(i=0;i<n;i++) { for(j=0;j<n;j++) { scanf("%...

    寻找鞍点在这里插入图片描述

     #include <stdio.h>
    int main()
    {
    	int a[6][6];
    	int i,j,max,min,flag=0,n,hang,lie;//flag说明,若flag为1时即判断出有鞍点,反之则无 
    	int k;
    	scanf("%d",&n);
    	for(i=0;i<n;i++)
    	{
    		for(j=0;j<n;j++)
    		{
    			scanf("%d",&a[i][j]);
    		}
    	}
    	max=0;
    	for(i=0;i<n;++i)//这里的for循环是为了控制循环的次数 
    	{
    		max=0;//每次外循环后,max置零,因为是在每行找最大值,就这里搞了我半天 
    		for(j=0;j<n;++j)//这里的for循环是找出每行的最大值 
    		{
    			if(max<a[i][j])
    			{
    				max=a[i][j];
    				lie=j;
    				hang=i;
    			}
    		}
    		min=max;//得到该行最大值然后开始进行该数在该列的比较,即判断其是否为最小值 
    		for(k=0;k<n;++k)
    		{
    			if(min>a[k][lie])//当发现这个数不是该列的最小值,跳出循环,取消比较 
    			{
    				flag=0;
    				break;
    			}//当循环完后,若if仍未执行,令flag=1,即该数为该列最小值, 
    			flag=1;
    		}
    		if(flag==1)
    		{
    			break;//因为给出的二维数组只有一个鞍点,找出后,直接跳出全部的循环,进行输出 
    		}
    	 } 
    	 if(flag==1)
    	{
    		printf("%d %d\n",hang,lie);
    	}
    	
    	if(flag!=1)
    	{
    		printf("NONE\n");
    	}
    	return 0;
    }
    

    第一次写博客,请大佬多多指教

    展开全文
  • C语言:寻找鞍点

    千次阅读 2019-11-26 19:39:48
    寻找鞍点 一个矩阵元素的“鞍点”是指该位置上的元素值在该行上最大、在该列上最小。 本题要求编写程序,求一个给定的n阶方阵的鞍点。 输入格式: 输入第一行给出一个正整数n(1≤n≤6)。随后n行,每行给出n个整数...

    寻找鞍点

    一个矩阵元素的“鞍点”是指该位置上的元素值在该行上最大、在该列上最小。
    本题要求编写程序,求一个给定的n阶方阵的鞍点。
    输入格式:
    输入第一行给出一个正整数n(1≤n≤6)。随后n行,每行给出n个整数,其间以空格分隔。
    输出格式:
    输出在一行中按照“行下标 列下标”(下标从0开始)的格式输出鞍点的位置。如果鞍点不存在,则输出“NONE”。题目保证给出的矩阵至多存在一个鞍点。
    输入样例1:
    4
    1 7 4 1
    4 8 3 6
    1 6 1 2
    0 7 8 9
    输出样例1:
    2 1
    输入样例2:
    2
    1 7
    4 1
    输出样例2:
    NONE

    #define _CRT_SECURE_NO_WARNINGS
    #include<stdio.h>
    #define N 6
    void main()
    {
    	int x, y, z, i, j, n, m, t, k, p;
    	int a[N][N], b[N] = { 0 };
    	y = 0;
    	p = 0;
    	scanf("%d", &n);
    	for (i = 0; i < n; i++)
    	{
    		for (j = 0; j < n; j++)
    		{
    			if (j == n - 1)
    				scanf("%d", &a[i][j]);
    			else
    				scanf("%d", &a[i][j]);
    		}
    	}
    	for (i = 0; i < n; i++)
    	{
    		m = 1;
    		p = k = a[i][0];
    		t = 0;
    		for (j = 0; j < n; j++)
    			if (k < a[i][j])
    			{
    				p = k = a[i][j];
    				t = j;
    				b[0] = t;
    			}
    		for (j = 0; j < n; j++)
    		{
    			if (k == a[i][j])
    			{
    				if (j != t)
    					b[m] = j;
    				m++;
    			}
    		}
    		for (z = 0; z < m; z++)
    		{
    			t = b[z];
    			for (x = 0; x < n; x++)
    			{
    				if (a[x][t] < k)
    				{
    					p = -1;
    					break;
    				}
    			}
    			if (z != m - 1)
    			{
    				if (p == 0)
    					break;
    				else
    					p = 0;
    			}
    		}
    		if (p == 0)
    		{
    			printf("%d %d", i, t);
    			y = 0;
    			break;
    		}
    		else
    			y = 1;
    	}
    	if (y == 1)
    		printf("NONE");
    }
    

    注:第一行是因为用的是VS编译器,用DEV或VC++6.0的要把第一行去掉。

    展开全文
  • 设计并验证以下算法:若矩阵采用三元组顺序表表示,设计并验证找出矩阵所有马鞍点的算法。 直接上代码: #include <stdio.h> #include <stdlib.h> #include <time.h>... int ...

    戳这里还有其他数据结构的题目噢

    https://blog.csdn.net/qq_45724947/article/details/115625130?spm=1001.2014.3001.5501


    设计并验证以下算法:若矩阵采用三元组顺序表表示,设计并验证找出矩阵所有马鞍点的算法。

    直接上代码: 

     

    #include <stdio.h>
    #include <stdlib.h>
    #include <time.h>
    
    #define MAX 500
    #define M 100
    #define N 100
    
     
    typedef int arr_type;
    
    //储存行 列 值 
    typedef struct {
    	int row;//从1 开始 
    	int col;//从1 开始 
    	arr_type value;
    }array;
    
    //储存三元组顺序表+总行数,总列数,总非零元素个数 
    typedef struct {
    	array arr[MAX];//从0开始 
    	int rownum,colnum,all;
    }sparse_matrix;
    
    
    //生成随机稀疏矩阵三元组 
    arr_type  rand_array(sparse_matrix *s1){
    	srand(time(NULL));
    	int r1;
    	r1 = s1->rownum * s1->colnum;
    	int k;
    	s1->all = 0;
    	//矩阵A随机生成
    	for(int i = 1;i <= s1->rownum;i++)
    		for(int j = 1;j <= s1->colnum;j++)
    		{
    			k = rand()%r1;
    			//printf("%d\n",k);
    			if(k < (r1/10))
    			{
    				s1->arr[s1->all].value = (rand()%9)+1;
    				s1->arr[s1->all].row = i;
    				s1->arr[s1->all].col = j;
    				s1->all++;
    			}
    		}
    	if(r1/s1->all > 20)
    		return 1;
    	
    	return 0;
    }
    
    int minn[M] = {0},maxx[N] = {0};
    void MinMax(sparse_matrix *s)///M行中最小,N列中最大
    {
        int i,j;
        int ord = 0,turn = 1;
        bool have = false;
        for(i=1; i <= s->rownum; i++) ///求出每行最小数,存在minn[0...M-1]中
        {
            while(s->arr[ord].row == i)
            {
            	if(turn == 1)
            		{
            			minn[i-1] = ord;
            			ord++;
    					turn = 0;
    					continue;
    				}
    			if(s->arr[minn[i-1]].value > s->arr[ord].value)
    				minn[i-1] = ord;
            	ord++;
    		}
    		turn = 1;
        }
        
        ord = 0;
    	for(j=1; j <= s->colnum; j++) ///求出每列最大数,存在maxx[0...N-1]中
        {
            //printf("%d",j);
    		while(1)// (1,2) (1,4) (2,3) (3,3) (3,5) (5,1) ord=012345,colnum=5,j>0,s->all=6,
            {		//   0		1	2		3	4		5
            	while(s->arr[ord].col != j&&(ord < s->all))
    	        {
    	        	if(ord == s->all-1)
    	        		break;
    	        	ord++;
    			}
    			
    	        if(turn == 1)
    			{
    				maxx[j-1] = ord;
    				turn = 0;
    				ord++;
    				continue;				
    			}
    			else if(s->arr[maxx[j-1]].value < s->arr[ord].value)
    				maxx[j-1] = ord;
    				
    			if(ord >= s->all-1)
    	        {
    	        	turn = 1;
    				break;
    			}				
    		}	        
        }
        
    	for(i=1; i<s->rownum; i++)
            for(j=1; j<s->colnum; j++)
                if(minn[i-1] == maxx[j-1]&&( s->arr[minn[i-1]].row == s->arr[maxx[j-1]].row )&&
    				( s->arr[minn[i-1]].col == s->arr[maxx[j-1]].col ))///找到马鞍点
                {
                    printf("array[%d][%d]=%d\n",s->arr[minn[i-1]].row,s->arr[minn[i-1]].col,s->arr[maxx[j-1]].value);
                    have=true;
                }
        if(!have)
            printf("没有马鞍点\n");
    }
    
    
    void print_matrix(sparse_matrix a){
    	
    	int ord=0,zero = 0;
    	
    	for(int i = 1;i <= a.rownum;i++)
    	{
    		for(int j = 1;j <= a.colnum;j++)
    		{
    			if((i == a.arr[ord].row)&&
    				(j == a.arr[ord].col))
    				{
    				printf("% 3d",a.arr[ord].value);
    				ord++;
    				}
    			else
    				printf("% 3d",zero);
    			
    		}
    	printf("\n");
    	}
    	printf("\n");
    }
    
    int main()
    {
    	sparse_matrix a;
    	printf("请输入矩阵行和列数:\n");
    	scanf("%d %d",&a.rownum,&a.colnum);
    	
    	if(rand_array(&a)){
    		printf("随机生成矩阵失败!\n");
    		return 0;
    	}
    	print_matrix(a);
    	MinMax(&a);
    	
    	return 0;
    }

    (请不要直接复制使用。代码仅供参考,希望读者借此代码自身可以理解学习)

    如果代码对您有帮助,不要忘记评论收藏噢~

    展开全文
  • 多维数组:寻找鞍点

    2020-12-10 13:41:01
    本人为 python 小白,写这题的代码有两个原因。...给定一个5*5的矩阵,每行只有一个最大值,每列只有一个最小值,寻找这个矩阵的鞍点鞍点指的是矩阵中的一个元素,它是所在行的最大值,并且是所在列的最小值。
  • 寻找鞍点
  • 实验8_5_寻找鞍点

    2020-12-01 17:26:50
    你的任务是寻找该矩阵的鞍点。一个矩阵的鞍点即该位置上的元素在所在行上最大,在所在列上最小。有的矩阵也可能没有鞍点。不难证明,如果一个矩阵有鞍点,那么这个鞍点一定是唯一的。如果某个矩阵只有1行(1列),则...
  • 请编程找出一个M*N矩阵中的鞍点,即该位置上的元素是该行上的最大值,是该列上的最小值。如果矩阵中没有鞍点,则输出“No saddle point!” [注]使用一维数组实现二维数组的操作过程, 可谓十分精彩. #include<...
  • C. 实验8_5_寻找鞍点

    2020-12-18 09:03:08
    实验8_5_寻找鞍点 问题描述: 任意给定一个nm的矩阵,矩阵的行数为n,列数为m。你的任务是寻找该矩阵的鞍点。一个矩阵的鞍点即该位置上的元素在所在行上最大,在所在列上最小。有的矩阵也可能没有鞍点。不难证明,...
  • D. 实验8_5_寻找鞍点

    2019-11-27 19:43:13
    D. 实验8_5_寻找鞍点 运行时间限制: 1000 运行内存限制: 65536 作者: scshuanghai 是否specialjudge: False 题目描述 问题描述: 任意给定一个nm的矩阵,矩...
  • 你的任务是寻找该矩阵的鞍点。一个矩阵的鞍点即该位置上的元素在所在行上最大,在所在列上最小。有的矩阵也可能没有鞍点。不难证明,如果一个矩阵有鞍点,那么这个鞍点一定是唯一的。如果某个矩阵只有1行(1列),则...
  • VB 寻找鞍点

    2010-06-07 14:41:46
    VB 寻找鞍点 VB 寻找鞍点 VB 寻找鞍点
  • 用c语言写的输入一个二维数组,找其中的鞍点
  • 1047. 寻找鞍点 题目描述 给定一个5*5的矩阵,每行只有一个最大值,每列只有一个最小值,寻找这个矩阵的鞍点。鞍点指的是矩阵中的一个元素,它是所在行的最大值,并且是所在列的最小值。 例如:在下面的例子中...
  • CCF NOI 1047.寻找鞍点

    2018-01-11 17:05:40
    给定一个5*5的矩阵,每行只有一个最大值,每列只有一个最小值,寻找这个矩阵的鞍点鞍点指的是矩阵中的一个元素,它是所在行的最大值,并且是所在列的最小值。 例如:在下面的例子中(第4行第1列的元素就是鞍点...
  • 什么是鞍点:鞍点指的是数组在...以下是我写的一个寻找鞍点的代码: package programmingTopics; import java.util.Scanner; public class 寻找鞍点 { public static void main(String[] args) { System.out.prin.
  • c语言二维数组寻找鞍点 鞍点是所在行最小,所在列最大的数 若有则打印,若无则输出no #include<stdio.h> int main() { int n[4][3]={11,13,121,407,48,88,23,58,1,134,30,62}; int sum=0; int i,k,min,...
  • 这是一种Python方法,它将所有行/列mins和max的索引列表集合起来,然后使用set操作来查找它们的交集:def allSaddles(matrix):rowmins = []rowmaxs = []colmins = []colmaxs = []for i,row in enumerate(matrix):m =...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 2,262
精华内容 904
关键字:

寻找鞍点

友情链接: Subroutine.rar