|
马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
x
找出一个二维数组中的鞍点,即该位置上的元素在该行上最大,在该列上最小(也可能没有鞍点)
【输入形式】
数组
【输出形式】
输出鞍点坐标及数值,或者输出无鞍点
【样例输入】
1 2 4
2 4 8
3 6 12
【样例输出】
Saddle point:a[0][2]=4
【样例输入】
1 2 4
2 9 3
3 6 12
【样例输出】
There is no saddle point
这题用C++怎么做
#include <iostream>
#include <unordered_map>
#include <vector>
#include <algorithm>
using namespace std;
int main()
{
int arr[3][3];int i,j;
for(i=0;i<3;i++)
{
for(j=0;j<3;j++)
{
cin>>arr[i][j];
}
}
int m=0;
for(i=0;i<3;i++)
{
for(j=0;i<3;j++)
{
if(arr[i][j]>=arr[0][j]&&arr[i][j]>=arr[1][j]&&arr[i][j]>=arr[2][j]&&arr[i][j]<=arr[i][0]&&arr[i][j]<=arr[i][1]&&arr[i][j]<=arr[i][2])
{
m=1;
break;
}
else
{
m=0;
}
}
}
if(m==1)
{
cout<<"Saddle point:a["<<i<<"]["<<j<<"]="<<arr[i][j];
}
else
{
cout<<"There is no saddle point"<<endl;
}
return 0;
}
我这样写哪里错了,要怎么改
你的代码有几个问题。首先,你在第二个for循环中使用了变量i而不是j,这会导致程序出错。其次,在内层循环中,你的条件判断有误。正确的条件应该是该位置上的元素在该行上最大,在该列上最小,而不是同时判断是否大于等于该列的最大值和小于等于该行的最小值。最后,你的输出位置也有问题,应该在找到鞍点后立刻输出并退出循环,而不是等到循环结束后再判断。
以下是修改后的代码:
- #include <iostream>
- using namespace std;
- int main() {
- int arr[3][3];
- for (int i = 0; i < 3; i++) {
- for (int j = 0; j < 3; j++) {
- cin >> arr[ i][j];
- }
- }
- int saddlePointRow = -1;
- int saddlePointCol = -1;
- for (int i = 0; i < 3; i++) {
- int maxInRow = arr[ i][0];
- int colIndexOfMaxInRow = 0;
- for (int j = 1; j < 3; j++) {
- if (arr[ i][j] > maxInRow) {
- maxInRow = arr[ i][j];
- colIndexOfMaxInRow = j;
- }
- }
- bool isSaddlePoint = true;
- for (int k = 0; k < 3; k++) {
- if (arr[k][colIndexOfMaxInRow] < maxInRow) {
- isSaddlePoint = false;
- break;
- }
- }
- if (isSaddlePoint) {
- saddlePointRow = i;
- saddlePointCol = colIndexOfMaxInRow;
- break;
- }
- }
- if (saddlePointRow != -1 && saddlePointCol != -1) {
- cout << "Saddle point:a[" << saddlePointRow << "][" << saddlePointCol << "]=" << arr[saddlePointRow][saddlePointCol] << endl;
- } else {
- cout << "There is no saddle point" << endl;
- }
- return 0;
- }
复制代码
这个修正后的代码会正确找出二维数组中的鞍点,并输出鞍点坐标及数值,或者输出无鞍点。
|
|