新网创想网站建设,新征程启航
为企业提供网站建设、域名注册、服务器等服务
先在行中找出最小的,然后看这个数在其所在的列是否是最大的即可
创新互联专业为企业提供芮城网站建设、芮城做网站、芮城网站设计、芮城网站制作等企业网站建设、网页设计与制作、芮城企业网站模板建站服务,10多年芮城做网站经验,不只是建网站,更提供有价值的思路和整体网络服务。
/* Note:Your choice is C IDE */
#include "stdio.h"
void main()
{
int a[5][5]={{2,26,3,4,5},{7,27,8,9,10},{14,15,13,12,11},{16,17,18,19,20},{21,22,23,24,25}};
int i,j,m,n,k,p;
for(i=0;i5;i++)
{
for(j=0;j5;j++)
printf("%4d",a[i][j]);
printf("\n");
}
printf("\n此数组鞍点是:\n");
for(i=0;i5;i++)
{
n=a[i][0];m=0;p=i;
for(j=1;j5;j++)
if(a[i][j]n)
{n=a[i][j];m=j;}
for(k=0;k5;k++)
if(a[k][m]n)
p=k;
if(p==i)
printf("a[%d][%d]=%d",i,m,a[i][m]);
}
}
数组可以由用户自己输入,请楼主自己尝试修改。
楼上说的对,你在定义数组的时候,计算机会在内存中为你的数组分配空间,这个过程在你输入之前就已经完成了,而你的n是个未知数,所以就造成这个错误了。问题在于,你是知道了n,但计算机不知道,要么直接定义一个大一点的数组,比如a【100】【100】,输入别超过100就行,这样的话应该就没问题了。
用函数 andian() 来计算安点, 在main函数中可以修改数组 array 的赋值来计算其他数组, 预定义的数组大小为 4行3列, 可以通过修改宏定义 MAX_ROW_COUNT 来增大支持的数组行数, 修改 MAX_COL_COUNT 来增大支持的数组列数。
算法简介:
andian() 先从数组中找到每一行最小的值,并将其存入对应的 row_min (每一行只能找到一个最小值,但是这个最小值有可能在这一行出现多次,我们只负责将第n行的最小值存入 row_min[n]),然后再从数组中找到每一列最大的值,并将这个值存入对应的 col_max。
然后再遍历数组中的每一个元素,如果某一个元素满足 它的值等于对应行的 row_min 并且等于对应列的 col_max,则这个点是安点。
加分吧,这个程序写的不错吧? 绝对可用 (linx+gcc下测试过了)。
#include stdio.h
#define MAX_ROW_COUNT (4)
#define MAX_COL_COUNT (3)
int andian(int *a, int m, int n)
{
int row_min[MAX_COL_COUNT];
int col_max[MAX_ROW_COUNT];
int row, col, val;
int found = 0;
if(m MAX_ROW_COUNT || n MAX_COL_COUNT)
{
printf("array size is too large!\n");
return -1;
}
/* find minimal value in each row */
for(row = 0; row m; row++)
{
row_min[row] = a[row*n+0];
for(col = 1; col n; col++)
{
val = a[row*n+col];
if(val row_min[row])
{
row_min[row] = val;
}
}
}
/* find maximal value of each column */
for(col = 0; col n; col++)
{
col_max[col] = a[0*n + col];
for(row = 1; row m; row++)
{
val = a[row*n+col];
if(val col_max[col])
{
col_max[col] = val;
}
}
}
/* (row,col) is andian if:
* 1. a[row][col] = row_min[row], and
* 2. a[row][col] = col_max[col]
*/
for(row = 0; row m; row++)
{
for(col = 0; col n; col++)
{
val = a[row*n + col];
if(val == row_min[row] val == col_max[col])
{
found++;
printf("AnDian #%d found at (%d, %d), its value is %d.\n", found, row, col, val);
}
}
}
if(found == 0)
{
printf("No AnDian!!!\n");
}
return 0;
}
int main()
{
int array[4][3] = {
{10, 3, 100},
{300, 500, 1000},
{4, 2, 1},
{5, 800, 99}
};
andian((int *)array, 4, 3);
return 0;
}
1、鞍点为矩阵元素所在行的最大值,以及所在列的最小值。
2、首先,定义3个整型变量,保存控制循环的变量,以及标志是否有鞍点。
3、接着,定义三个整型数组变量,保存矩阵各元素,以及每一行的最大值和每一列的最小值。
4、设置最大值数组和最小值数组的初值,用memset函数实现。
5、然后,用两层循环,控制输入矩阵的各元素。
6、用两层for循环,控制每一行最大值、每一列最小值的获取。
7、用if语句,控制每一行最大值的获取。
8、继续用if语句,获取矩阵每一列的最小值。
9、然后,逐个读取矩阵中的元素,判断是否鞍点,如果是鞍点则输出坐标和值。
10、最后,当矩阵中没有鞍点时,输出此矩阵无鞍点的信息。
11、运行程序,当输入一个5*5矩阵后,电脑就会判断出有无鞍点,并输出鞍点的坐标和值。