信息学奥赛一本通 1122:计算鞍点 | OpenJudge NOI 1.8 05:计算鞍点
生活随笔
收集整理的這篇文章主要介紹了
信息学奥赛一本通 1122:计算鞍点 | OpenJudge NOI 1.8 05:计算鞍点
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
【題目鏈接】
ybt 1122:計算鞍點
OpenJudge NOI 1.8 05:計算鞍點
【題目考點】
1. 二維數組
2. 求最大最小值
【思路及題解代碼】
解法1:
遍歷各行,先找到這一行的最大值,假設最大值在第m_j列,然后判斷該值是不是第m_j列的最小值,如果是,那么該位置就是鞍點。
#include<bits/stdc++.h> using namespace std; int main() {bool isFound = false;//是否找到鞍點int a[6][6];for(int i = 1; i <= 5; ++i)for(int j = 1; j <= 5; ++j)cin>>a[i][j];for(int i = 1; i <= 5; ++i)//找到每行的最大值,而后判斷該值是否是這一列的最小值{int m_j = 1;//m_j:最大值的縱坐標for(int j = 1; j <= 5; ++j)//遍歷第i行,j是列號,找到最大值{if(a[i][j] > a[i][m_j])m_j = j;}//此時a[i][m_j]是第i行的最大值bool isAndian = true;//判斷a[i][m_j]是否是第m_j列的最小值,如果是,那么a[i][m_j]就是鞍點for(int k = 1; k <= 5; ++k)//遍歷第m_j列 k是行號{if(a[k][m_j] < a[i][m_j])//只要在第m_j列找到一個小于a[i][m_j]的元素,那么該點就不是鞍點{isAndian = false;break;}}if(isAndian){cout<<i<<' '<<m_j<<' '<<a[i][m_j]<<endl;isFound = true;break;}}if(isFound == false)cout<<"not found"<<endl;return 0; }解法2:
設整型二維數組x,初始化為0。尋找各行的最大值的位置,若該位置是(i,j),那么將x[i][j]++。尋找各行最小值的位置,若位置是(i,j),將x[i][j]++。遍歷數組x,如果發現某個位置x[i][j] == 2,那么該位置就是鞍點。否則就沒有鞍點。
#include<bits/stdc++.h> using namespace std;int main() {int a[6][6], x[6][6] = {};for(int i = 1; i <= 5; ++i)for(int j = 1; j <= 5; ++j)cin>>a[i][j];for(int i = 1; i <= 5; ++i)//找到每行的最大值{int m_j = 1;//m_j:最大值的縱坐標for(int j = 1; j <= 5; ++j)//遍歷第i行,j是列號,找到最大值{if(a[i][j] > a[i][m_j])m_j = j;}x[i][m_j]++;}for(int j = 1; j <= 5; ++j)//找到每列的最小值{int m_i = 1;//m_i:最小值的橫坐標for(int i = 1; i <= 5; ++i)//遍歷第j列,i是列號,找最小值{if(a[i][j] < a[m_i][j])m_i = i;}x[m_i][j]++;}for(int i = 1; i <= 5; ++i)for(int j = 1; j <= 5; ++j){if(x[i][j] == 2)//找到鞍點{cout<<i<<' '<<j<<' '<<a[i][j];return 0;}}cout<<"not found";return 0; }總結
以上是生活随笔為你收集整理的信息学奥赛一本通 1122:计算鞍点 | OpenJudge NOI 1.8 05:计算鞍点的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 信息学奥赛一本通 1024:保留3位小数
- 下一篇: 信息学奥赛一本通 1031:反向输出一个