编写程序,输入一个正整数n(1<=n<=6)和n阶方阵a中的元素,如果找到a的鞍点(鞍点的元素值在该行上最大,该列上最小),就输出它的下标;否则输出“NO”(设a最多有一个鞍点)学C语言不久,只能写前面一部分的,后面的真的不会了!求高手解答!谢谢!
推荐回答
#include "stdio.h"#include "stdlib.h"#define N 10#define M 10int main(){ int i,j,k,n,flag1,flag2,a[N][M],max,maxi,maxj=0; printf("\ninput n:"); scanf("%d",&n); if(n>6) printf("please input 1<=n<=6!!"); for(i=1;i<=n;i++) /*输入矩阵*/ for(j=1;j<=n;j++) scanf("%d",&a[i][j]); for(i=1;i<=n;i++) /*输出矩阵*/ { for(j=1;j<=n;j++) printf("%5d",a[i][j]); printf("\n"); } flag2=0; /*设置无鞍点标记*/ for(i=1;i<=n;i++) { max=a[i][1]; for(j=1;j<=n;j++) if(a[i][j]>max) { max=a[i][j]; maxi=i; maxj=j; } if(j>n&&maxj==0) goto aa; for(k=1,flag1=1;k<=n&&flag1;k++)/*设置标记flag1=1时表示存在鞍点,flag1=0时表示不存在鞍点*/ if((k!=maxi)&&(max>=a[k][maxj])) flag1=0; if(flag1) /*存在鞍点,输出位置和鞍点*/ { printf("\n(%d,%d)的%d is\n",maxi-1,maxj,max); flag2=1; } aa:; } if(!flag2) /*标记flag2=0时,表示无鞍点,输出“无鞍点”信息*/ printf("\nNO!!\n"); system("pause"); return 0;} 下面是对于 一般的二位数组 实现的~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ #include "stdio.h"#include "stdlib.h"#define N 10#define M 10int main(){ int i,j,k,m,n,flag1,flag2,a[N][M],max,maxi,maxj=0; printf("\n输入行数n:"); scanf("%d",&n); printf("\n输入列数m:"); scanf("%d",&m); for(i=1;i<=n;i++) /*输入矩阵*/ for(j=1;j<=m;j++) scanf("%d",&a[i][j]); for(i=1;i<=n;i++) /*输出矩阵*/ { for(j=1;j<=m;j++) printf("%5d",a[i][j]); printf("\n"); } flag2=0; /*设置无鞍点标记*/ for(i=1;i<=n;i++) { max=a[i][1]; for(j=1;j<=m;j++) if(a[i][j]>max) { max=a[i][j]; maxi=i; maxj=j; } if(j>m&&maxj==0) goto aa; for(k=1,flag1=1;k<=n&&flag1;k++)/*设置标记flag1=1时表示存在鞍点,flag1=0时表示不存在鞍点*/ if((k!=maxi)&&(max>=a[k][maxj])) flag1=0; if(flag1) /*存在鞍点,输出位置和鞍点*/ { printf("\n(%d,%d)的%d is\n",maxi-1,maxj,max); flag2=1; } aa:; } if(!flag2) /*标记flag2=0时,表示无鞍点,输出“无鞍点”信息*/ printf("\nNO!!\n"); system("pause"); return 0;}