C++找出一个二维数组中的鞍点,即该位置上的元素在该行上最大,在该列上最小(也可能没有鞍点)
今日正式用csdn博客記錄,回顧我所學到的知識,分享一些我的人生感悟和自身經歷。也希望未來通夠過此平臺和更多喜愛編程的人交流學習。
道聽途說再加上自己的感悟,認為編程最重要的是思想,而不是語言本身,語言只是個工具。所以我們得先學思想。遇到問題,應該先想如果是自己去做會怎么處理,但我們不能一步到位,因為計算機并不會做一步到位,他最擅長的是迭代,所以我們要問題分解許多基本的步驟,然后一步一步去執行,其實我們人類也一樣,遇到大的困難,我們不能慌,我們想辦法將困難分解,一點一點的去解決困難,這樣我們沒解決一個小問題帶來的成就感會鼓舞我們去解決下一個小問題,一個一個的小問題解決了,自然大的問題就迎刃而解了。所以現在我們將問題分解,在矩陣里面找一個元素,這個元素在該行上最大,在該列上最小。我們先找一行的最大值,然后找行最大值所在的列,最后找行最大值所在列有沒有比它小的值,如果有就存在鞍點。
我們假設有n行m列
//用來判斷行最大值所在的列的代碼如下
for(j=0;j<m;j++)
?? ??? ?{
?? ??? ??? ?if(a[i][j]>max)
?? ??? ??? ?{
?? ??? ??? ??? ?max=a[i][j];
?? ??? ??? ??? ?maxj=j;
?? ??? ??? ?}
?? ??? ?}
flag ture;
//確定列后用來和它所在的這一整列進行比較,這里設置了一個布爾變量。
?? ??? ?for(k=0;k<m;k++)
?? ??? ?{
?? ??? ??? ?if(max>a[k][maxj])
?? ??? ??? ?{
?? ??? ??? ??? ?flag=false;
?? ??? ??? ??? ?continue;
?? ??? ??? ?}
?? ??? ?}
判斷完這一行還沒完事,我們需要判斷完每一行。所以需要對上邊的程序進行迭代,用一個for循環就可以實現了。以下是全部代碼,親測運行成功
#include<iostream> using namespace std; int main() {const int n=4,m=5;int i,j,k,a[n][m],max,maxj;bool flag;for(i=0;i<n;i++)for(j=0;j<m;j++)cin>>a[i][j];for(i=0;i<n;i++){max=a[i][0],maxj=0;for(j=0;j<m;j++){if(a[i][j]>max){max=a[i][j];maxj=j;}}flag=true;for(k=0;k<n;k++){if(max>a[k][maxj]){flag=false;continue;}}if(flag){cout<<"a["<<i<<"]["<<"["<<maxj<<"]="<<max<<endl;break;}}if(!flag)cout<<"it does not exist"<<endl;return 0;}總結
以上是生活随笔為你收集整理的C++找出一个二维数组中的鞍点,即该位置上的元素在该行上最大,在该列上最小(也可能没有鞍点)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: c语言形式参数若为b 4,2016年计算
- 下一篇: c语言图案问题,C语言绘图问题