题目: 求鞍点:求出一个3行4列的二维数组中鞍点及其所在行与列(鞍点:即该位置上的元素在该行中最大,在该列中最小。)
思路:
1.定义二维数组
2.标记一行中的最大元素
3.标记一列中的最小元素
4.被标记2次的点就是鞍点
代码实现
#define r 3
#define c 4
int main()
{
int a[r][c], b[r][c] = { 0 };
//数组a为所给二维数组,数组b用来标记a
int i, j; //i,j循环变量
int max, min; //标记行中最大值,列中最小值
int rmax, cmax, rmin, cmin; //最大/小值坐标
//实现思路1
for (i = 0; i < r; i++)
{
for (j = 0; j < c; j++)
{
scanf("%d", &a[i][j]);
}
}
//寻找每行中最大元素(思路2)
for (i = 0; i < r; i++) //遍历每一行
{
max = a[i][0]; //最大值为该行首元素
rmax = i;
cmax = 0;
for (j = 1; j < c; j++)
{
//比较max和max右方一个元素
if (max < a[i][j])
{
max = a[i][j];
rmax = i;
cmax = j;
}
}
b[rmax][cmax]++; //标记该行最大元素
}
//寻找每列最小元素(思路3)
for (i = 0; i < c; i++)//遍历每一列
{
min = a[0][i]; //最小值初始化为该列第一行元素
rmin = 0;
cmin = i;
for (j = 1; j < r; j++)
{
//比较min和min下方元素
if (min > a[j][i])
{
min = a[j][i];
rmin = j;
cmin = i;
}
}
b[rmin][cmin]++;//标记每一列最小元素
}
for (i = 0; i < r; i++)
{
for (j = 0; j < c; j++)
{
if (b[i][j] == 2) //实现思路4
{
printf("ROW:%d COLUNMN:%d\n", i, j);
printf("The Point is %d\n", a[i][j]);
}
}
}
return 0;
}
总结
要善于标记具有某一种特性的变量,最后靠是否具有标记来输出满足条件的结果