/*输入一个正整数n(n小于等于6大于等于1)和n阶矩阵a中的元素,如果找到a的鞍点(鞍点的元素值在该行上最大,在该列上最小),
就输出它的下标,否则输出NO(设a最多有一个鞍点)。*/
#include<stdio.h>
#define n 3
int main(void)
{
int i,j,p,q,a[n][n],b[n][n];
printf("输入数值");
for(i=0;i<n;i++)
for(j=0;j<n;j++)
scanf("%d",&a[i][j]);
for(i=0;i<n;i++){
for(j=0;j<n;j++)
printf("%2d",a[i][j]);
printf("\n");
}
//找出每行最大的值,赋给数组b
p=q=0;
for(i=0;i<n;i++,p++)
for(j=0;j<n;j++)
if(a[i][j]>a[p][q])
{
a[i][j]=b[p][q];
if(q<n-1)
q=j+1;
}
//将数组b中的值,与数组a的值所在列相比,,,,但是不知道怎么写。。。
for(i=0;i<n;i++){
for(j=0;j<n;j++)
if(b[i][j]<a[j][i])
{
printf("鞍点为a[%d][%d]=%d\n",i,j,a[i][j]);
}
else
printf("NO");
}
return 0;
}
我是想把a中每行最大的值赋给b中相应的位置。该怎么改?
追答试一下以下代码(⊙o⊙)…行倒是行,,但是为什么在最后一个for中,q在不同行会是不同是值?,q=j之后不应该只是一个数值?
追答不同行的最大值不一定在同一列啊!!q是列值下标!
追问我指的就是不一定在同一列,而q是一个数值,所以应该不成立嗄😳为什么q能记住不同的数值?
追答那不是在循环中吗?
在每行的循环中,q是一定的!
q是一定的话,为什么最后一个for循环可以实现?q一定不就代表了最大值在同一列?
追答好好读一读程序,别不动脑子的问问题,好吗?
追问对不起😳想了半天还是不知道,,我比较笨能告诉我吗😳
追答for(i=0;i<n;i++)😳除了最后一个for循环我都懂,就是对于最后一个for循环中a[i][q]为什么是可以代表不同的列的最大值有疑问,因为q是定值,就算i++也只是在q那一列上不是么
追答for( j=0;j<n;j++ ) //这里的j此时代表行值
{
if ( a[j][q] < a[i][q] ) 注意这里是检查的q列 , 变化的是j !!!!
先静心读明白代码,自己在纸上写些数据,按程序代码运行情况推演一下!动动手,动动脑。
终于知道了→_→谢谢!
追答不客气,多动手,多动脑
追问之前一直没把第一个for的范围看清😳误认为是一个嵌套循环和一个单独for循环
追答多练习写代码就好了