| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1494 人关注过本帖
标题:鞍点 C/C++
只看楼主 加入收藏
xiuye1987
Rank: 1
等 级:新手上路
帖 子:18
专家分:0
注 册:2007-9-18
收藏
 问题点数:0 回复次数:8 
鞍点 C/C++
烦请大家帮我看一下这个程序有什么问题,
这是一个关于输入一个二位数组的鞍点的程序
鞍点就是一行中最大一列中最小的点
#include<iostream>
#include<stdio.h>
using namespace std;
#define M 5
void main()
{
int a[M][M],an[M];
int m,n,flag=0,s=0;
for(int i=0;i<M;i++)
{
cout<<"请输入一行数字:"<<endl;
for(int j=0;j<M;j++)
cin>>a[i][j];
}
for(i=0;i<M;i++)
{
for(int j=0;j<M;j++)
printf("%4d",a[i][j]);
cout<<endl;
}
for(i=0;i<M;i++)
{
for(int j=1;j<M;j++)
{
if(a[i][j]>=a[i][j-1])
{
an[i]=a[i][j];
m=i,n=j;
}
else
{
an[i]=a[i][j-1];
m=i,n=j-1;
}
}
for(int k=0;k<M;k++)
{
if(an[i]<=a[k][n])
flag=1;
else
flag=0;
}
if(flag==1)
{
s++;
cout<<"第"<<s<<"个鞍点是a["<<m<<"]["<<n<<"]="<<an[i]<<endl;
}
if(s==0)
cout<<"此数列无鞍点!"<<endl;
}
}
搜索更多相关主题的帖子: 鞍点 include std void 
2007-09-24 08:28
yangzhifu
Rank: 1
等 级:新手上路
威 望:2
帖 子:433
专家分:0
注 册:2007-4-11
收藏
得分:0 

我想说的是你的编程风格不好啊,看着眼花!不看了


方寸之内,剖天下; 方坛之内,析自我;
2007-09-24 12:37
电脑爱好者
Rank: 1
等 级:新手上路
帖 子:43
专家分:0
注 册:2006-5-6
收藏
得分:0 

#include<iostream> #include<stdio.h>
using namespace std ; #define M 5 void main() { int a[M][M],an[M]; int m,n,flag=0,s=0 ; for(int i=0;i<M;i++) { cout<<"请输入一行数字:"<<endl ; for(int j=0;j<M;j++) cin>>a[i][j]; } for(i=0;i<M;i++) { for(int j=0;j<M;j++) printf("%4d",a[i][j]); cout<<endl ; } for(i=0;i<M;i++) { for(int j=1;j<M;j++) { if(a[i][j]>=a[i][j-1]) { an[i]=a[i][j]; m=i,n=j ; } else { an[i]=a[i][j-1]; m=i,n=j-1 ; } } for(int k=0;k<M;k++) { if(an[i]<=a[k][n]) flag=1 ; else flag=0 ; } if(flag==1) { s++; cout<<"第"<<s<<"个鞍点是a["<<m<<"]["<<n<<"]="<<an[i]<<endl ; } if(s==0) cout<<"此数列无鞍点!"<<endl ; } }

[此贴子已经被作者于2007-9-24 12:48:14编辑过]

2007-09-24 12:43
josen0205
Rank: 2
来 自:江苏
等 级:论坛游民
帖 子:307
专家分:52
注 册:2007-5-8
收藏
得分:0 

[CODE]
#include<iostream>
using namespace std;

#define M 5

int get_max(int a[M][M],int i) /* 求第i行最大数下标 */
{
int j,index=0,tmp;
tmp=a[i][0];
for(j=1;j<M;j++)
{
if(a[i][j]>tmp)
{
tmp=a[i][j];
index=j;
}
else if(a[i][j]==tmp)
return -1;
}
return index;
}

int get_min(int a[M][M],int j) /* 求第j列最小数下标 */

{
int i,index=0,tmp;
tmp=a[0][j];
for(i=1;i<M;i++)
{
if(a[i][j]<tmp)
{
tmp=a[i][j];
index=i;
}
else if(a[i][j]==tmp)
return -1;
}
return index;
}

int main()
{
int a[M][M];
int i_index,j_index,count=0;
for(int i=0;i<M;i++)
{
cout<<"请输入一行数字:"<<endl;
for(int j=0;j<M;j++)
cin>>a[i][j];
}
for(i=0;i<M;i++)
{
for(int j=0;j<M;j++)
printf("%4d",a[i][j]);
cout<<endl;
}
for(i=0;i<M;i++)
{
i_index=get_max(a,i);
if(i_index<0)
{
cout<<i+1<<"行无鞍点!"<<endl;
continue;
}
j_index=get_min(a,i_index);
if(j_index<0)
{
cout<<i_index+1<<"列无鞍点"<<endl;
continue;
}
count++;
cout<<"第"<<count<<"个鞍点为:"<<a[j_index][i_index]<<endl;
}
return 0;
}

[/CODE]

只有想不到,没有做不到
2007-09-24 13:07
xiuye1987
Rank: 1
等 级:新手上路
帖 子:18
专家分:0
注 册:2007-9-18
收藏
得分:0 

先谢谢三楼的帮我把程序重写了一遍,3Q
四楼的程序我运行了一遍,结果还是不对
不知道我的理解对不对:按点就是以行里最大,一列中最小的一个数。
四楼的函数分别定义的风格觉得不错,值得借鉴


2007-09-24 22:07
josen0205
Rank: 2
来 自:江苏
等 级:论坛游民
帖 子:307
专家分:52
注 册:2007-5-8
收藏
得分:0 
程序改一了下,这次应该是对的了
[CODE]

#include <iostream>
#include <iomanip>
using namespace std;

#define M 4

int get_max(int a[M][M],int i) /* 求第i行最大数下标 */
{
int j,index=0,tmp,count=0;
tmp=a[i][0];
for(j=1;j<M;j++)
{
if(a[i][j]>tmp)
{
tmp=a[i][j];
index=j;
}
}
for(j=0;j<M;j++)
{
if(a[i][j]==tmp)
count++;
}
if(count>1)
return -1;
return index;

}

int get_min(int a[M][M],int j) /* 求第j列最小数下标 */

{
int i,index=0,tmp,count=0;
tmp=a[0][j];
for(i=1;i<M;i++)
{
if(a[i][j]<tmp)
{
tmp=a[i][j];
index=i;
}
}
for(i=0;i<M;i++)
{
if(a[i][j]==tmp)
count++;
}
if(count>1)
return -1;
return index;
}

int main()
{
int a[M][M];
int i_index,j_index,count=0;
for(int i=0;i<M;i++)
{
cout<<"请输入一行数字:"<<endl;
for(int j=0;j<M;j++)
cin>>a[i][j];
}
for(i=0;i<M;i++)
{
for(int j=0;j<M;j++)
cout<<setiosflags(ios::left)<<setw(4)<<a[i][j];
cout<<endl;
}
for(i=0;i<M;i++)
{
i_index=get_max(a,i);
if(i_index<0)
{
cout<<i+1<<"行无鞍点"<<endl;
continue;
}
j_index=get_min(a,i_index);
if(j_index<0)
{
cout<<i_index+1<<"列无鞍点"<<endl;
continue;
}
count++;
cout<<"第"<<count<<"个鞍点为:"<<"a["<<j_index<<"]["<<i_index<<"]:"<<a[j_index][i_index]<<endl;
}
return 0;
}

[/CODE]

[此贴子已经被作者于2007-9-25 13:40:37编辑过]


只有想不到,没有做不到
2007-09-25 13:07
neverTheSame
Rank: 3Rank: 3
来 自:江西农业大学
等 级:新手上路
威 望:9
帖 子:1511
专家分:0
注 册:2006-11-24
收藏
得分:0 

for(int j=1;j<M;j++)
{
if(a[i][j]>=a[i][j-1])
{
an[i]=a[i][j];
m=i,n=j;
}
else
{
an[i]=a[i][j-1];
m=i,n=j-1;
}
}
这段程序有问题.
假如一行的数据为: 5 1 2 3 4
结果:an[i]==4 m=i,n=4

建议改写成:
for(a[i]=a[i][0],m=i,n=0,int j=1;j<M;j++)
{
if(a[i][j]>a[i] )
{
an[i]=a[i][j];
m=i,n=j;
}
}


wap酷禾网(http://wap.),提供免费的、优质的、快捷的wap资源下载服务。
2007-09-25 13:26
xiuye1987
Rank: 1
等 级:新手上路
帖 子:18
专家分:0
注 册:2007-9-18
收藏
得分:0 
回复:(xiuye1987)鞍点 C/C++
谢谢各位的帮忙,我的程序也改好了
#include<iostream>
#include<stdio.h>
using namespace std;
#define M 4
void An()
{
int i,j,t,m,n,k,flag=0,count=0,a[M][M];
for(i=0;i<M;i++)
{
cout<<"输入第"<<i+1<<"行数字:"<<endl;
for(j=0;j<M;j++)
cin>>a[i][j];
cout<<endl;
}
for(i=0;i<M;i++)
{
for(j=0;j<M;j++)
printf("%4d",a[i][j]);
cout<<endl;
}
for(i=0;i<M;i++)
{
t=a[i][0];
m=i;
n=0;
for(j=1;j<M;j++)
if(a[i][j]>t)
{
t=a[i][j];
m=i;
n=j;
}
for(k=0;k<M;k++)
if(t>a[k][n])
flag=1;
if(flag==0)
{
count++;
cout<<"第"<<count<<"个鞍点是:a["<<m<<"]["<<n<<"]="<<t<<endl;
}
else
cout<<"第"<<i+1<<"行无鞍点!"<<endl;
flag=0;
}
}
void main()
{
An();
}

2007-09-25 16:40
xiuye1987
Rank: 1
等 级:新手上路
帖 子:18
专家分:0
注 册:2007-9-18
收藏
得分:0 
6楼的程序我运行过了,OK
只是会反复输出同一个鞍点
7楼的意见不错
谢谢各位了

2007-09-25 16:46
快速回复:鞍点 C/C++
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.028280 second(s), 7 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved