正文
c语言用函数求矩阵鞍点 c++求矩阵鞍点
小程序:扫一扫查出行
【扫一扫了解最新限行尾号】
复制小程序
【扫一扫了解最新限行尾号】
复制小程序
求教:C语言求矩阵的鞍点问题
// 下面是你c语言用函数求矩阵鞍点的代码 c语言用函数求矩阵鞍点我加了个 注释
#include stdio.h
void main()
{
while(1)
{
int a[4][4];
int j,i,m,t,x,y;
printf("please input sixteen numbers:\n");
for(j=1;j=4;j++)
for(i=1;i=4;i++)
scanf("%d",a[j-1][i-1]);
printf("\n");
for(j=1;j=4;j++)
{
if(a[j-1][0]=a[j-1][1])
m=a[j-1][0];
else
m=a[j][1]; // 这里出问题了 应该是 m = a[j-1][1];
for(i=3;i=4;i++)
if(a[j-1][i-1]=m)
m=a[j-1][i-1];
for(x=1;x=4;x++)
{
if(a[j-1][x-1]==m)
{
if(a[0][x-1]=a[1][x-1])
t=a[0][x-1];
else
t=a[1][x-1];
for(y=3;y=4;y++)
if(a[y-1][x-1]=t)
t=a[y-1][x-1];
if(m==t)
printf("此数列c语言用函数求矩阵鞍点的鞍点为元素a[%d][%d],对应数值大小为 %d\n",j-1,x-1,m);
}
}
}
}
}
c语言 鞍点问题
#include stdio.h
#ifndef NULL
#define NULL ((void *)0)
#endif
int *FindSaddle(int nRow, int nCol, int *pMatrix);
int main(int argc, char *argv[])
{
int *pRes = NULL;
// 矩阵定义代码段, 如
int A[3][3] = {{1,2,3},{4,5,6},{7,8,9},};
pRes = FindSaddle(/*nRow*/3, /*nCol*/3, /*pMatrix*/A[0]);
if (pRes != NULL)
{
printf("%d",*pRes);
}
else
{
printf("未找到\n");
}
return 0;
}
int *FindSaddle(int nRow, int nCol, int *pMatrix)
{
int i, nMin;
int j, nMax;
for (i=0; inRow; i++)
{
for (nMin=0, j=1; jnCol; j++)
{
if (pMatrix[i*nCol + j] pMatrix[i*nCol + nMin])
nMin = j;
}
for (nMax=0, j=1; jnRow; j++)
{
if (pMatrix[j*nRow + nMin] pMatrix[nMax*nRow + nMin])
nMax = j;
}
if (i == nMax)
return pMatrix[i*nRow + nMin];
//return pMatrixi*nRow + nMin;
}
return NULL;
}
望采纳c语言用函数求矩阵鞍点!c语言用函数求矩阵鞍点!c语言用函数求矩阵鞍点!!
C语言编程:找出一个二维数组的“鞍点”,即该位置上的元素在该行上最大,在该列上最小。也可能没有鞍点。
思路:遍历矩阵的每一行,找出最大值,在最大值对应的列找最小值,然后判断最大值和最小值的位置是否相等。具体代码如下:
#include stdio.h
#includestdlib.h
void FindSaddlePoint(int a[][20], int m, int n);
main()
{
int a[20][20]; //数组储存矩阵
int m,n; //分别表示矩阵的行数和列数
int i,j; //循环变量
//人机交互输入数据
printf("Input m,n:\n");
scanf("%d,%d",m,n);
printf("Input matrix:\n" );
for(i=0;im;i++)
{
for(j=0;jn;j++)
scanf("%d",a[i][j]);
}
FindSaddlePoint(a,m,n);
system("pause");
}
//函数功能:输入矩阵数组、行数和列数,判断是否存在鞍点并输出结果
void FindSaddlePoint(int a[][20], int m, int n)
{
int i,j,k; //循环变量
int b,c,d; //储存下标:b和d储存最大值的下标,d储存最小值的下标
int flag=0; //判断是否有鞍点:值为1则有,值为0则无
int max,min; //每行中的最大值和每列中的最小值
//第一层循环遍历每一行
for(i=0;im;i++)
{
//先该行中的第一个数赋值给最大值并保存其位置
max=a[i][0];
b=i;
d=0;
//找出每一行中的最大值的值及位置
for(j=0;jn;j++)
{
if(maxa[i][j])
{
max=a[i][j];
b=i;
d=j;
}
}
//先将找到的最大值赋值给最小值,作为初值并存储下标(由于列是一样的所以只需要储存行的位置即可)
min=max;
c=b;
//从找到的最大值中的那一列找该列的最小值并存储其位置
for(k=0;km;k++)
{
if(mina[k][d])
{
min=a[k][d];
c=k;
}
}
//判断最大值和最小值的位置是否相同
if(b==c)
{
flag=1;
break;
}
}
//输出语句
if(flag==1)
printf("a[%d][%d] is %d\n",b,d,max);
else
printf("No saddle point!\n");
}
用C语言编辑 鞍点计算
额,这题前不久刚答过。。。
蒽,楼上的,本来确实没那么复杂,但是若是自定义矩阵大小,再加上防错处理,还有再考虑上一个矩阵中鞍点不止一个(如4*4矩阵例子:
1 2 4 4
2 3 5 6
3 4 6 7
4 5 7 8
此时鞍点就有两个,是第一行的第三列和第四列)
我的算法思想是这样的:先找出各行的最大值在数组中相对第一个元素的距离(如上面的4*4矩阵,8相对第一个元素1的距离为3*4+3=15),存储在一个数组中。再找出各列的最小值在数组中相对第一个元素的距离,也存储在另一个数组中。最后比较这两个数组,如果有相等的值,说明这个元素就是鞍点了,这算法也可以完美解决有多个鞍点的数组。
#include stdio.h
#define MAX_SIZE 100 //最大长度
struct node { //用来存储所有行的最大值或所有列的最小值的所在元素在矩阵中的位置
int num[MAX_SIZE * MAX_SIZE];
int len; //当前num数组存储数据的长度(length)
};
int main() {
int hang,lie; //行,列
int arrays[MAX_SIZE][MAX_SIZE];
int i,j,flag,min_i,max_j; //flag标记矩阵有无鞍点
struct node max, min;
printf("此为为矩阵找鞍点程序!\n");
printf("请输入行和列的大小(用空格分开,且不超过%d):\n",MAX_SIZE);
scanf("%d%d",hang,lie);
while((hang MAX_SIZE) || (lie MAX_SIZE) || (hang = 0) || (lie = 0)) { //防错处理,增强程序健壮性
printf("行或列的大小不合法,请重新输入:\n");
scanf("%d%d",hang,lie);
} //while
for(i = 0; i hang; i++) {
printf("请输入第%d行元素(用空格分开):\n",i+1);
for(j = 0; j lie; j++) {
scanf("%d",arrays[i][j]);
} //for
} //for
printf("**********************************\n");
printf("您输入的矩阵为:\n");
for(i = 0; i hang; i++) {
for(j = 0; j lie; j++) {
printf("%-4d",arrays[i][j]);
} //for
printf("\n");
} //for
max.len = 0;
for(i = 0; i hang; i++) { //找出行的最大值
max_j = 0;
for(j = 1; j lie; j++) {
if(arrays[i][max_j] arrays[i][j]) { //找出该行第一个最大元素所在列的下标max_j
max_j = j;
} //if
} //for
max.num[max.len++] = i * lie + max_j;
for(j = max_j+1; j lie; j++) { //找出该行其他最大值,并将其位置存储在max.num数组中
if(arrays[i][j] == arrays[i][max_j]) {
max.num[max.len++] = i * lie + j;
} //if
} //for
} //for
min.len = 0;
for(j = 0; j lie; j++) { //找出列的最小值
min_i = 0;
for(i = 1; i hang; i++) {
if(arrays[min_i][j] arrays[i][j]) { //找出该列第一个最小元素所在行的下标min_i
min_i = i;
} //if
} //for
min.num[min.len++] = min_i * lie + j;
for(i = min_i+1; i hang; i++) { //找出该列其他最小值,并将其位置存储在min.num数组中
if(arrays[i][j] == arrays[min_i][j]) {
min.num[min.len++] = i * lie + j;
} //if
} //for
} //for
flag = 0; //先假设该矩阵无鞍点
for(i = 0; i max.len; i++) { //比较max和min矩阵中有无相同的值
for(j = 0; j min.len; j++) {
if(max.num[i] == min.num[j]) {
flag = 1; //说明该矩阵有鞍点
min_i = max.num[i] / lie;
max_j = max.num[i] % lie;
printf("\n鞍点位置: 第%d行第%d列\n",min_i + 1,max_j + 1);
printf("鞍点值为: %d\n",arrays[min_i][max_j]);
} //if
} //for
} //for
if(!flag) { //说明矩阵无鞍点
printf("该矩阵无鞍点!\n\n");
} //if
printf("**********************************\n");
return 0;
} //main
c语言问题 找矩阵中的鞍点
#include stdio.h
#define N 3
#define M 4
void main()
{
int i,j,k,a[N][M];
int max,maxj,flag;
printf("Please input matrix:\n");
for(i=0;iN;i++)
for(j=0;jM;j++)
scanf("%d",a[i][j]);
for(i=0;iN;i++)
{
max=a[i][0];
maxj=0;
for(j=0;jM;j++)
if(a[i][j]max)
{max=a[i][j];
maxj=j;
}
flag=1;
for(k=0;kN;k++)
if(maxa[k][maxj])
{flag=0;
continue;
}
if(flag)
{printf("a[%d][%d]=%d\n",i,maxj,max);
break;}
}
if(!flag)
printf("NO!");
}
关于c语言用函数求矩阵鞍点和c++求矩阵鞍点的介绍到此就结束了,不知道你从中找到你需要的信息了吗 ?如果你还想了解更多这方面的信息,记得收藏关注本站。