C++找出一个二维数组中的鞍点,即该位置上的元素在该行上最大,在该列上最小(也可能没有鞍点)
今日正式用csdn博客記錄,回顧我所學(xué)到的知識(shí),分享一些我的人生感悟和自身經(jīng)歷。也希望未來通夠過此平臺(tái)和更多喜愛編程的人交流學(xué)習(xí)。
道聽途說再加上自己的感悟,認(rèn)為編程最重要的是思想,而不是語言本身,語言只是個(gè)工具。所以我們得先學(xué)思想。遇到問題,應(yīng)該先想如果是自己去做會(huì)怎么處理,但我們不能一步到位,因?yàn)橛?jì)算機(jī)并不會(huì)做一步到位,他最擅長的是迭代,所以我們要問題分解許多基本的步驟,然后一步一步去執(zhí)行,其實(shí)我們?nèi)祟愐惨粯?#xff0c;遇到大的困難,我們不能慌,我們想辦法將困難分解,一點(diǎn)一點(diǎn)的去解決困難,這樣我們沒解決一個(gè)小問題帶來的成就感會(huì)鼓舞我們?nèi)ソ鉀Q下一個(gè)小問題,一個(gè)一個(gè)的小問題解決了,自然大的問題就迎刃而解了。所以現(xiàn)在我們將問題分解,在矩陣?yán)锩嬲乙粋€(gè)元素,這個(gè)元素在該行上最大,在該列上最小。我們先找一行的最大值,然后找行最大值所在的列,最后找行最大值所在列有沒有比它小的值,如果有就存在鞍點(diǎn)。
我們假設(shè)有n行m列
//用來判斷行最大值所在的列的代碼如下
for(j=0;j<m;j++)
?? ??? ?{
?? ??? ??? ?if(a[i][j]>max)
?? ??? ??? ?{
?? ??? ??? ??? ?max=a[i][j];
?? ??? ??? ??? ?maxj=j;
?? ??? ??? ?}
?? ??? ?}
flag ture;
//確定列后用來和它所在的這一整列進(jìn)行比較,這里設(shè)置了一個(gè)布爾變量。
?? ??? ?for(k=0;k<m;k++)
?? ??? ?{
?? ??? ??? ?if(max>a[k][maxj])
?? ??? ??? ?{
?? ??? ??? ??? ?flag=false;
?? ??? ??? ??? ?continue;
?? ??? ??? ?}
?? ??? ?}
判斷完這一行還沒完事,我們需要判斷完每一行。所以需要對上邊的程序進(jìn)行迭代,用一個(gè)for循環(huán)就可以實(shí)現(xiàn)了。以下是全部代碼,親測運(yùn)行成功
#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;}總結(jié)
以上是生活随笔為你收集整理的C++找出一个二维数组中的鞍点,即该位置上的元素在该行上最大,在该列上最小(也可能没有鞍点)的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: c语言形式参数若为b 4,2016年计算
- 下一篇: c++折半查找算法